Tôi có một quá trình mà dường như bế tắc:CPU Sử dụng cao cho ngủ xử lý
# strace -p 5075
Process 5075 attached - interrupt to quit
futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL
Nó đang ngồi trên "futex" gọi hệ thống, và có vẻ là vô thời hạn chờ đợi vào một khóa. Quá trình này được thể hiện được tiêu thụ một số lượng lớn các CPU khi "top" được điều hành:
# top -b -n 1
top - 23:13:18 up 113 days, 4:19, 1 user, load average: 1.69, 1.74, 1.72
Tasks: 269 total, 1 running, 268 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.1%us, 0.1%sy, 0.0%ni, 91.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 12165696k total, 3810476k used, 8355220k free, 29440k buffers
Swap: 8388600k total, 43312k used, 8345288k free, 879988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5075 omdb 18 0 2373m 1.7g 26m S 199.7 14.9 102804:11 java
Quá trình này cũng được chứng minh là trong một "S" - trạng thái ngủ, có ý nghĩa nếu nó được chờ đợi vào một số nguồn. Tuy nhiên, tôi không hiểu tại sao sử dụng CPU sẽ gần 200% nếu quá trình ở trạng thái ngủ. Tại sao đầu báo cáo sử dụng CPU cao như vậy trên một quá trình ngủ? Không nên sử dụng CPU của nó bằng không?
Vâng, thực tế là 'hàng đầu' đang chạy không có nghĩa là quy trình khác phải đang ngủ. Hơn 100% sử dụng ngụ ý một hệ thống đa lõi ;-). Mặc dù vỏ tương tác và các quy trình con mà nó sinh ra có thể đồng thời đang chạy và * đang xảy ra * để khiến nhiệm vụ khác phải ngủ, nhưng nó không nhất thiết là trực tiếp của một nguyên nhân, đúng không? – binki