우리는이 JBoss 서버 문제를 꽤 오랫동안 디버깅했습니다. 약 10 시간의 작업 후, 서버는 100 % CPU 공황 상태에 빠지며 그냥 멈 춥니 다. 이 시간 동안 새 프로그램을 실행할 수 없기 때문에 kill -quit
도 스택 추적을 얻을 수 없습니다. 이 높은 100 % SYS CPU로드는 지난 10-20 초 동안 지속되고 몇 분마다 반복됩니다.내 JBoss 서버가 Linux에서 100 % SYS CPU를 조회합니다. 무엇이 이것을 일으킬 수 있습니까?
우리는 꽤 오랫동안 작업 해 왔습니다. 우리는 그것이 GC와 관련이 있다고 생각하지만, 더 작은 프로그램으로는 확인할 수 없습니다. 우리는 -client
과 ParNew GC
을 사용하여 i386 32 비트, RHEL5 및 Java 1.5.0_10을 실행 중입니다.
여기에 우리가 지금까지 시도 무엇 : 우리가 실제로 서버를 사용할 수 있도록
- 우리는 CPU 선호도를 제한 할 때 높은 부하 안타.
strace
을 사용하면SIGSEGV
의 무한 루프가 표시되고 시그널이 반환됩니다. 우리는 이것을 Java 프로그램으로 재현하려고했습니다. SYS CPU %가
WeakHashMap
또는 null 포인터에 액세스 할 때 높게 올라가는 것은 사실입니다. 문제는fillStackTrace
이 많은 사용자 CPU %를 사용했기 때문에 우리는 결코 100 % SYS CPU에 도달하지 못했습니다.스트레스가 10 시간이 지나면 GC가 열리고 전체 GC가 때로는 5 초 걸리는 경우가 있습니다. 그래서 우리는 그것이 메모리와 관련이 있다고 가정합니다.
jstack
그 기간 동안 모든 스레드가 차단 된 것으로 나타났습니다. 그 시간 동안pstack
은 가끔 MarkSweep 스택 추적을 보여 주었기 때문에 이에 대해서도 확신 할 수 없었습니다.SIGQUIT
을 전송하면 아무것도 생성되지 않았습니다. SYS %로드 기간이 끝난 후 Java에서 스택 추적을 덤프했습니다.
이제 우리는 Sun에 문의 할 수 있도록 코드의 작은 조각으로이 문제를 재현하려고합니다.
무엇이 문제인지 알면 알려 주시기 바랍니다. 우리는 아이디어에 열려 있고 우리는 단서 있습니다. 어떤 아이디어라도 환영합니다. :)
시간 내 주셔서 감사합니다.
JBoss가이 문제로 유휴 상태로 실행되거나 실제로 응용 프로그램을 실행하고 있습니까? – Mork0075
3 년 후 ... 이제 Maven 빌드와 JDK 1.7.0_07, 커널 3.6.2와 똑같은 것을 실행하고 있습니다. 동일한 JVM을 사용하는 이전 커널은이 문제를 표시하지 않습니다. 기묘한. – Raman