2012-06-22 101 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