2012-06-22 66 views
5

我有一个在CentOS 6.0上运行的java应用程序。它总是通过cron在后台运行。有时候这款应用在使用100%cpu时进入等待状态。使用100%cpu的java

我的Java版本是:

java version "1.6.0_17" 
OpenJDK Runtime Environment (IcedTea6 1.7.4) (rhel-1.21.b17.el6-x86_64) 
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode) 

还有其他症状:

一个。该过程的一个线程似乎在循环等待某件事。当使用追踪strace的,它显示了连续以下O/P:

futex(0x7fb8000ac728, FUTEX_WAKE_PRIVATE, 1) = 0 
futex(0x7fb8000ac754, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1340347489,> 822867000}, ffffffff) = -1 ETIMEDOUT (Connection timed out) 

湾看起来这个过程已经完成,看着它正在使用的文件。只剩下几个文件。的“LS的/ proc/PID/FD /显示输出:

lr-x------ 1 root root 64 Jun 22 13:13 0 -> pipe:[77107601] 
l-wx------ 1 root root 64 Jun 22 13:13 1 -> pipe:[77120162] 
l-wx------ 1 root root 64 Jun 22 13:13 2 -> /var/log/mithi/mcs/agent_account_mailstore_exceed_limit.sh.log 
lr-x------ 1 root root 64 Jun 22 13:13 3 -> /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/rt.jar 

有没有人遇到过类似的情况? 任何线索或引用将非常有帮助。

更具体地说,在CentOS 6的后台运行基于openjdk的Java进程有没有已知的问题?

现在我能够模拟一个非常简单的无限循环的问题,当这个脚本运行约3以下

#!/bin/bash 

while [ 1 ] 
do 
    /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin/java -version & 
    sleep 1s 
done 

给出 - 4个小时,我发现一个或两个Java进程这是挂起或处于无限循环且具有相同症状,即

futex(0x7fb8000ac754, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1340347489,> 822867000}, ffffffff) = -1 ETIMEDOUT (Connection timed out) 

这仅发生在多处理器系统上,而不发生在单处理器系统上。它也可以在RHEL6上模拟,不仅仅是CentOS6。

回答

1

将内核升级到kernel-2.6.32-220(即CentOS 6.2内核)后问题解决了。

+0

由于上游[内核错误32922](https://bugzilla.kernel.org/show_bug.cgi?id=32922),上游内核版本从3.14开始并在3.18中修复。但是在某些发行版(例如CentOS 6)中,这个bug已经在backports中转移到早期的内核版本中。请参阅此[Google网上论坛讨论]中的漫长对话(https://groups.google.com/forum/#!话题/机械同情/ QbmpZxp6C64) –

4

有很多可能的原因。这些,我能想到的:

  1. 你进程的内存使用情况非常接近最大堆大小,从而导致臭名昭著的全部选区。使用-Xloggc:/path/to/logFile.log -XX:+PrintGCDetails选项启用GC日志,然后使用类似GCViewerHPJmeter的工具对其进行分析。

  2. 你的过程实际上在做一些事情(比如无限循环),你可以通过做一些线程转储和分析来检查它。你可以用VisualVMThread Dump Analyzer来做到这一点。

+0

正如我上面所说的,我可以用 “/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin/javaversion”来模拟prb。这表明它不是gc prb,也不是应用程序中的无限循环。 – amolkul