Tôi có một ứng dụng java chạy trên CentOS 6.0. Nó luôn luôn chạy trong nền qua cron. Đôi khi ứng dụng này đi vào trạng thái chờ trong khi sử dụng CPU 100%.java bằng 100% cpu
phiên bản java của tôi là:
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)
Các triệu chứng khác bao gồm:
a. Một luồng của quá trình có vẻ như đang ở trong một vòng lặp chờ đợi thứ gì đó. Khi truy sử dụng strace, nó cho thấy sau o/p liên tục:
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. Dường như quá trình này đã hoàn thành công việc, xem các tệp đang sử dụng. Chỉ còn lại một vài tệp. Kết quả của 'ls/proc/pid/fd/show:
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
Có ai gặp tình huống tương tự? Bất kỳ đầu mối hoặc tham chiếu nào sẽ rất hữu ích.
Cụ thể hơn, có bất kỳ vấn đề nào đã biết khi chạy các quy trình Java dựa trên openjdk trong nền trên CentOS 6 không?
Bây giờ tôi có thể mô phỏng các vấn đề với một vòng lặp vô hạn rất đơn giản, đưa ra dưới đây
#!/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
Khi kịch bản này được chạy trong khoảng 3-4 giờ, tôi thấy quá trình một hoặc hai java mà treo hoặc trong vòng lặp vô hạn với triệu chứng giống hệt ví dụ
futex(0x7fb8000ac754, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1340347489,> 822867000}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
này đang xảy ra trên các hệ thống đa xử mà thôi, chứ không phải trên hệ thống xử lý duy nhất. Nó cũng có thể được mô phỏng trên RHEL6, không chỉ CentOS6.
Vì ngược dòng [Lỗi hạt nhân 32922] (https://bugzilla.kernel.org/show_bug.cgi?id=32922), trong phiên bản hạt nhân ngược dòng từ 3,14 và được sửa trong 3,18. Tuy nhiên, lỗi đã được chọn trong backports cho các phiên bản hạt nhân trước đó trong một số bản phân phối (ví dụ: CentOS 6). Xem cuộc trò chuyện dài trong [thảo luận Google Groups] này (https://groups.google.com/forum/#!topic/mechanical-sympathy/QbmpZxp6C64) –