Java JVM定期挂起
正在尝试调试行为异常的Java VM。所讨论的进程是一个在Centos 5上运行Sun VM 1.6u24的大型VM(100GB堆),它正在执行常规后端工作,即数据库访问、文件i/O等 在为软件版本升级重新启动进程后,我们注意到其吞吐量显著下降。大多数情况下,top报告Java进程完全利用了2个内核。在此期间,VM完全不负责:不编写日志,也不响应外部工具,如jstack或kill-3。一旦VM恢复,该过程将按正常方式继续,直到下一次挂起 strace显示,在这些挂起期间,只有2个线程进行系统调用。这些是VM线程“VM线程”(21776)和“VM定期任务线程”(21786)。据推测,这两个线程正在占用CPU时间。应用程序线程偶尔会醒来并执行其工作。剩下的时间,他们似乎在等待各种未来。顺便说一下,正常相位的第一行始终是SIGSEGVJava JVM定期挂起,java,jvm,freeze,centos5,strace,Java,Jvm,Freeze,Centos5,Strace,正在尝试调试行为异常的Java VM。所讨论的进程是一个在Centos 5上运行Sun VM 1.6u24的大型VM(100GB堆),它正在执行常规后端工作,即数据库访问、文件i/O等 在为软件版本升级重新启动进程后,我们注意到其吞吐量显著下降。大多数情况下,top报告Java进程完全利用了2个内核。在此期间,VM完全不负责:不编写日志,也不响应外部工具,如jstack或kill-3。一旦VM恢复,该过程将按正常方式继续,直到下一次挂起 strace显示,在这些挂起期间,只有2个线程进行系统调用
[pid 21776] sched_yield() = 0
[pid 21776] sched_yield() = 0
[pid 21776] sched_yield( <unfinished ...>
[pid 21786] <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
[pid 21776] <... sched_yield resumed> ) = 0
[pid 21786] futex(0x2aabac71ef28, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 21776] sched_yield( <unfinished ...>
[pid 21786] <... futex resumed> ) = 0
[pid 21786] clock_gettime(CLOCK_MONOTONIC, {517080, 280918033}) = 0
[pid 21786] clock_gettime(CLOCK_REALTIME, {1369750039, 794028000}) = 0
[pid 21786] futex(0x2aabb81b94c4, FUTEX_WAIT_PRIVATE, 1, {0, 49923000} <unfinished ...>
[pid 21776] <... sched_yield resumed> ) = 0
[pid 21776] sched_yield() = 0
[pid 21776] sched_yield() = 0
[pid 21955] --- SIGSEGV (Segmentation fault) @ 0 (0) ---
[pid 21955] rt_sigreturn(0x2b1cde2f54ad <unfinished ...>
我们研究了NTPD的问题,包括闰秒错误,但建议的解决方法没有帮助,使用外部NTPD服务器也没有帮助。重启机器本身也没有什么帮助。我们已经启用了GC日志记录,它看起来不是GC问题,因为没有消息表明这一点。如果您希望得到任何有助于解决此问题的建议,我们将不胜感激 以下是我要看的几件事:
- 当JVM没有响应时,使用
和iostat
来查看系统是否在抖动。当您过度分配内存时,可能会发生这种情况;i、 e.您的整个系统使用的虚拟内存明显多于物理内存vmstat
- 打开JVM的GC日志记录,查看JVM无响应与GC运行之间是否存在关联
Thread 552 (Thread 0x4935f940 (LWP 21906)):
#0 0x00000030b040ae00 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00002b1cdd8548d6 in os::PlatformEvent::park(long) () from /usr/lib/jvm/java/jre/lib/amd64/server/libjvm.so
#2 0x00002b1cdd92b230 in ObjectMonitor::wait(long, bool, Thread*) () from /usr/lib/jvm/java/jre/lib/amd64/server/libjvm.so
#3 0x00002b1cdd928853 in ObjectSynchronizer::wait(Handle, long, Thread*) () from /usr/lib/jvm/java/jre/lib/amd64/server/libjvm.so
#4 0x00002b1cdd69b716 in JVM_MonitorWait () from /usr/lib/jvm/java/jre/lib/amd64/server/libjvm.so
#5 0x00002b1cde193cc8 in ?? ()
#6 0x00002b1ce2552d90 in ?? ()
#7 0x00002b1cdd84fc23 in os::javaTimeMillis() () from /usr/lib/jvm/java/jre/lib/amd64/server/libjvm.so
#8 0x00002b1cde188a82 in ?? ()
#9 0x0000000000000000 in ?? ()
Thread 551 (Thread 0x49460940 (LWP 21907)):
#0 0x00000030b040ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00002b1cdd854d6f in Parker::park(bool, long) () from /usr/lib/jvm/java/jre/lib/amd64/server/libjvm.so
#2 0x00002b1cdd98a1c8 in Unsafe_Park () from /usr/lib/jvm/java/jre/lib/amd64/server/libjvm.so
#3 0x00002b1cde193cc8 in ?? ()
#4 0x000000004945f798 in ?? ()
#5 0x00002b1cde188a82 in ?? ()
#6 0x0000000000000000 in ?? ()