CentOS 6.0'da çalışan bir java uygulamasına sahibim. Her zaman cron ile arka planda çalışır. Bazen bu uygulama% 100 işlemci kullanırken bekleme durumuna geçer.java% 100 CPU Kullanıyor
Benim java sürümü:
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)
Diğer belirtiler şunlardır:
a. Sürecin bir iş parçacığı bir şey bekliyor gibi görünüyor. strace kullanılarak izlendi, bu sürekli o/p aşağıdakileri gösterir:
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)
, b. Süreç, çalıştığı dosyaları inceleyerek çalışmayı bitirmiş gibi görünüyor. Sadece birkaç dosya kaldı. 'Ls/proc/pid/fd/gösterileri çıkışı:
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
herkes benzer bir durumla karşı karşıya mı? Herhangi bir ipucu veya referans çok yardımcı olacaktır.
Daha açık söylemek gerekirse, openjdk tabanlı Java işlemlerini CentOS 6'da arka planda çalıştırırken bilinen herhangi bir sorun var mı? Ben bir veya iki java süreçleri bulmak, 4 saat -
Şimdi bu komut yaklaşık 3 için çalıştırıldığında
#!/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
aşağıda verilen, çok basit bir sonsuz döngüye sorunu simüle açabiliyorum asılı ya da bu değil, yalnızca tek işlemcili sistemler, çok işlemcili sistemler üzerinde oluyor
futex(0x7fb8000ac754, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1340347489,> 822867000}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
yani aynı belirti ile sonsuz bir döngüde. Ayrıca sadece CentOS6 değil, RHEL6 üzerinde simüle edilebilir.
Yukarı akış nedeniyle (Kernel bug 32922) (https://bugzilla.kernel.org/show_bug.cgi?id=32922), 3.14'ten beri gelen çekirdek sürümlerinde ve 3.18'de sabitlenmiştir. Ancak hata, bazı dağıtımlarda (örneğin, CentOS 6) eski çekirdek sürümlerine backport'larda toplanmıştı. Bu [Google Grupları tartışması] 'ndaki uzun sohbete bakın (https://groups.google.com/forum/#!Konu/mekanik-sempati/QbmpZxp6C64) –