我有一個在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。
由於上游[內核錯誤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) –