ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MAT
    카테고리 없음 2023. 3. 13. 15:08

    상황 : 320 만건 정도 되는 테이블이 2.5GiB 정도 되는 크기인데 8GB 인 서버에 데이터를 올리면 OOM 에러가 난다.

     

    jconsole 로 heap 사용량 확인해봐도 충분한 용량.

     

    jstat 으로 2초 마다 GC 정보 확인 

    - 데이터가 어느정도 로드된 후에는 GCT 가 점점 늘어난다.

    - S0 , S1 은 Survivor 영역인데 S0은 0, S1은 계속 100프로로 고정되어 나온다.

    * Minor GC가 발생할 때 Eden 에 있는 obj 들이 S0 혹은 S1 로 이동하고,

    * Minor GC가 발생하면 S0 -> S1 혹은 S1 -> S0 으로 데이터가 옮겨지며 obj 의 age가 늘어나고, 한쪽은 완전히 비워진다.

    * Meta 도 꽤 높이 차지하고 있다. 98-9% 였다가 MaxDirect 를 늘려주니까 96으로 아주 조금 떨어진 것 같다.

    jstat -gccapacity -h20 -t [pid] 2000

     

    - 메모리 사용량 확인 : used 3,225,240  free   1,305,580

    top

    OOM 을 heapDUmp 로 떠서 MAT 로 분석.

    heapdump 생성 옵션

    결론 : ResultSet 쪽에서 발생하는 오류 

    ResultSet rs = loadStmt.executeQuery(loadQuery);

     

     

    details >> 를 누르면 

     

    여기서 object 를 클릭하면 List ojbects > outgoing references 를 누르면 아래와 같은 list_objects 를 볼 수 있다.

    retained Heap 에 2115608792 를 1024로 세 번 나누면 1.9 GB 이다.

    Xmx를 1gb 늘려보고  Xms 를 Xmx 와  동일하게 늘렸다.

    그리고 gc발생 시 이그나이트에서 connection time out 이 발생해 timeout 설정 시간을 늘렸더니 해결됨.

     

     

    반응형
Designed by Tistory.