자바트러블슈팅-메모리 진단하기(4)

메모리 진단하기

메모리 문제

시스템이 느리다고 항상 메모리 단면을 사용하는 것은 아니다.

먼저 스레드가 원인일지 모르니 스레드로 원인 분석을 먼저해보는것이 좋다.

메모리 문제로 인하여 응답시간이 느려질때는 원인

  • 메모르 크기를 잡지 않거나 너무 작게 잡아 GC가 너무 자주 발생하는 경우
  • 임시 메모리를 많이 사용하여 GC가 자주 발생하는경우

위처럼 문제가 생겼다면 jstat 를 활용해 원인을 파악한다.

  • 메모리 크기 관련 문제면 -gccapacity 옵션을 사용
  • 메모리 사용량과 관련된 내용이라면 -gcutil 옵션을 사용

애플리케이셔이 응답하지 않을때도 메모리가 원인일 수 있다.

응답하지 않을때 메모리 원인중 가장 큰확률은 메모리 릭 이다.
메모리가 부족하면 GC 작업만 지속해서 수행되고 애플리케이션은 응답을 못하게 될 수가 있기 때문이다.

메모리릭이 원인일 경우 절차

  • 현재 메모리 사용량을 확인해본다. 만약 메모리 사용량이 지속해서 95%이상일 경우에는 메모리 릭이 문제의 원인일 확률이 높다.
  • 메모리 사용량이 지속해서 높을 경우에는 메모리 단면을 생성한다.
  • 도구를 이용하여 어떤 객체가 죽지 않고 계속 점유되고 있는지를 확인해 본다.

Full GC가 아주 자주 발생하면서 메모리 사용량이 80%~90% 정도라면 메모리 관련 문제일 확률이 높다.

참조