메모리 누수 추적

메모리 누수 추적

Red Hat Enterprise Linux Server 버전 6.7을 실행하는 서버가 있습니다. 서버는 nginx 웹 서버가 있는 Tomcat 서버를 포함하여 많은 Java 프로세스를 실행합니다. 서버에는 12GB의 RAM이 할당됩니다.

부팅 직후 서버는 1289MB의 RAM(유휴 -m -/+ 버퍼/캐시 라인)을 사용하고 있음을 보여줍니다. 출력은 아래와 같습니다.

서버 시작 시 "ps aux"는 모든 프로세스의 메모리 사용량을 총 1,290,996k의 메모리(RSS 열)로 표시합니다. 이 두 숫자는 매우 가깝습니다.

2일의 가동 시간 후 free -m은 이제 10,698MB의 메모리를 사용하고 있으며 모든 프로세스의 "ps aux"는 무려 8,345,352k를 사용하고 있음을 보여줍니다.

우리는 모든 프로세스를 하나씩 중지/종료하려고 시도했으며, 최소한의 작업만 실행하더라도(Tomcat, Java, Nginx 없음) ~2GB의 "손실된" 메모리를 복구할 수 없었습니다. 손실된 메모리를 복구하려면 서버를 다시 시작해야 한다는 사실을 발견했습니다. 서버가 3~4일 이상 다시 시작되지 않으면 스왑 공간을 차지하기 시작하여 결국 CPU 사용량이 높아지고 서버에서 실행되는 Java 애플리케이션이 중단됩니다.

또한 서버가 VMWare를 사용하여 가상 머신으로 실행되고 있다는 점도 언급하고 싶습니다.

시작 시 -m 출력을 해제합니다.

             total       used       free     shared    buffers     cached
Mem:         11852       1787      10064          0         28        468
-/+ buffers/cache:       1289      10562 
Swap:         8191          0       8191 

정상 작동 2일 후 -m 출력 해제

             total       used       free     shared    buffers     cached
Mem:         11852      11625        226          0        146        779
-/+ buffers/cache:      10698       1153 
Swap:         8191         43       8148 

"누락된" 메모리가 어디에 있는지 진단하여 문제를 해결하려면 어떻게 해야 합니까? 어떤 제안이라도 감사하겠습니다.

감사해요!

관련 정보