相关疑难解决方法(0)

Hung JVM消耗100%的CPU

我们在Linux 32位(CentOS)上运行Sun JRE 6u20上的JAVA服务器.我们将Server Hotspot与CMS收集器一起使用,并使用以下选项(我只提供了相关的选项):

-Xmx896m -Xss128k -XX:NewSize=384M -XX:MaxPermSize=96m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
Run Code Online (Sandbox Code Playgroud)

有时,在运行一段时间后,JVM似乎陷入挂起状态,即使我们没有向应用程序发出任何请求,CPU也继续以100%旋转(我们有8个逻辑CPU,所以看起来就像只有一个CPU一样旋转).在这种状态下,JVM不响应SIGHUP信号(kill -3),我们无法通过jstack正常连接它.我们可以用"jstack -F"连接,但输出很狡猾(我们可以看到很多来自JStack的NullPointerExceptions显然是因为它无法"走"某些堆栈).所以"jstack -F"输出似乎没用.

我们已经从"gdb"运行了堆栈转储,并且我们能够匹配旋转CPU的线程ID(我们发现使用"top"和每个线程视图 - "H"选项)并且线程堆栈出现在gdb结果中,它是这样的:

Thread 443 (Thread 0x7e5b90 (LWP 26310)):
#0  0x0115ebd3 in CompactibleFreeListSpace::block_size(HeapWord const*) const () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#1  0x01160ff9 in CompactibleFreeListSpace::prepare_for_compaction(CompactPoint*) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#2  0x0123456c in Generation::prepare_for_compaction(CompactPoint*) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#3  0x01229b2c in GenCollectedHeap::prepare_for_compaction() () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#4  0x0122a7fc in GenMarkSweep::invoke_at_safepoint(int, ReferenceProcessor*, bool) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#5  0x01186024 in CMSCollector::do_compaction_work(bool) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#6  0x011859ee in CMSCollector::acquire_control_and_collect(bool, bool) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#7  0x01185705 …
Run Code Online (Sandbox Code Playgroud)

java

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×1