그래서 우분투에서 Java 프로세스가 자동으로 종료되고 며칠 째 이유를 알 수 없습니다.뭔가가 우분투에서 Java 프로세스를 계속 죽이고 있습니다. 왜 그런지 알겠습니까?
내 상자에 35.84GB의 RAM이 있습니다. Java 프로세스를 시작할 때 -Xmx28g 매개 변수를 전달하므로 사용할 수있는 최대 RAM 용량보다 작아야합니다. 그러면 jstat 출력의
# jstat -gccause -t `pgrep java` 60000
마지막 몇 줄의 프로세스가 있었다 사망 직전 :
Time S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
14236.1 99.98 0.00 69.80 99.40 49.88 1011 232.305 11 171.041 403.347 unknown GCCause No GC
14296.2 93.02 0.00 65.79 99.43 49.88 1015 233.000 11 171.041 404.041 unknown GCCause No GC
14356.1 79.20 0.00 80.50 99.55 49.88 1019 233.945 11 171.041 404.986 unknown GCCause No GC
14416.2 0.00 99.98 24.32 99.64 49.88 1024 234.945 11 171.041 405.987 unknown GCCause No GC
이가에 내려 가서 무엇을 것 같다/다음과 같이
나는 그러면 jstat 실행 var/log/syslog : https://gist.github.com/1369135
내 Java 응용 프로그램 이외의 다른 서버에서는 실행중인 내용이 없습니다. 무슨 일이야?
편집 : 저는 Java 버전 1.6.0_20을 실행 중이며 시작시 Java에 전달하는 유일한 주목할만한 매개 변수는 "-server -Xmx28g"입니다. 나는 응용 프로그램 서버를 사용하지 않지만 내 응용 프로그램은 "간단한 웹 프레임 워크"를 포함합니다.
최대 물리적 RAM은 프로세스에서 사용할 수있는 양과 동일하지 않습니다. Eric Lippert는이. 나는 그 게시물이 Windows/.NET 중심이라는 것을 알고 있지만, 또한 철저히 정리하고있다. 호기심에서 벗어나 OutOfMemoryError를 잡아서 로그를 기록하여 이것이 원인인지 확인/거부 할 수 있습니까? –
나는 stomout과 stderr를 로깅하고 있는데, 나는 OOM이 어디로 갈 것인지를 믿는다. 그리고 나는 OOM 예외를 나타낼만한 것을 보지 못한다. 나의 경험으로 OOM은 앱을 죽이지 않고 끝내게된다. 이 경우 앱이 OS에 의해 삭제 된 것 같습니다. – sanity