Mengapa memuat tinggi meskipun pada kenyataannya CPU atau disk tidak digunakan secara berlebihan

20

Saya mendapatkan output berikut dari top:

Cpu(s): 43.8%us, 32.5%sy,  4.8%ni,  2.0%id, 15.6%wa,  0.2%hi,  1.2%si,  0.0%st
Mem:  16331504k total, 15759412k used,   572092k free,  4575980k buffers
Swap:  4194296k total,   260644k used,  3933652k free,  1588044k cached

output dari iostat -xk 6menunjukkan hal berikut:

Device: rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda       0.00   360.20   86.20  153.40  1133.60  2054.40    26.61     1.51    6.27   0.77  18.38
sdb       0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd      22.60   198.80   17.40   31.60   265.60   921.60    48.46     0.18    3.70   1.67   8.20
sdc      16.80   218.20   22.20   23.40   261.60   966.40    53.86     0.21    4.56   1.49   6.78

Berdasarkan hal di atas sepertinya ada sesuatu yang harus kelebihan beban. Tapi apa?

Pertanyaan

  1. Jika bukan harddisk atau CPU, lalu bagaimana?
  2. Sepertinya 15,6% waktu CPU dihabiskan untuk menunggu. Apa yang sebenarnya bisa menunggu?
pengguna4951
sumber
2
apa spesifikasi cpu dan berapa bebannya?
sepehr
Muat lebih dari 100
user4951
beban relatif terhadap jumlah core cpu dan cpu, apa spesifikasi cpu dari sistem Anda?
sepehr

Jawaban:

49

Sebagai titik klarifikasi, beban tidak secara langsung terkait dengan CPU. Ini adalah salah satu kesalahpahaman paling umum tentang beban. Fakta bahwa Anda menyebutkan disk tampaknya mengakui bahwa Anda mengetahui hal ini, tetapi saya hanya ingin menyebutkannya ketika saya melihat komentar yang mengindikasikan beberapa orang percaya sebaliknya.

Load didefinisikan sebagai jumlah proses yang menunggu sumber daya sistem. Ini biasanya CPU, disk, atau jaringan, tetapi dapat berupa perangkat keras apa saja.
"Proses" tidak harus merupakan proses yang lengkap juga. Sebuah utas didefinisikan sebagai "proses ringan", dan setiap utas yang menunggu meningkatkan jumlah beban.


Untuk mengetahui proses mana yang menjadi masalah:

Jalankan top -H(yang -Hmemungkinkan menampilkan utas)

Pintasan keyboard bervariasi menurut versi.

Dengan top baru (3.3 dan setelah):

Tekan funtuk memunculkan opsi bidang.
Gunakan tombol panah untuk pergi ke S = Process Statusdan tekan s.
Tekan quntuk kembali ke halaman utama.
Tekan Shift+ Runtuk membalikkan penyortiran.

Dengan atasan yang lebih tua (sebelum 3.3):

Tekan Shift+ ountuk memunculkan opsi pengurutan.
Kemudian wuntuk mengurutkan berdasarkan status proses.
Kemudian Enteruntuk kembali ke halaman utama.
Lalu Shift+ Runtuk membalikkan penyortiran.

Kemudian di Skolom, cari proses yang memiliki Datau R(sekarang harus di atas). Ini akan menjadi proses yang berkontribusi terhadap beban sistem.

Jika prosesnya menunjukkan a D, itu berarti "tidur tanpa gangguan". Biasanya ini disebabkan ketika proses menunggu di I / O (disk, jaringan, dll).
Jika proses menunjukkan R, itu berarti hanya melakukan perhitungan normal.


Untuk menemukan lebih banyak tentang apa yang dilakukan proses-proses itu:

Dengan top baru (3.3 dan setelah):

Tekan funtuk memunculkan opsi bidang.
Gunakan tombol panah untuk pergi ke WCHAN = Sleeping in Functiondan tekan duntuk mengaktifkannya.
Kemudian quntuk kembali ke halaman utama.

Dengan atasan yang lebih tua (sebelum 3.3):

Tekan flalu yuntuk mengaktifkan WCHANbidang.

Jika sistem Anda memiliki opsi kernel yang diperlukan, dan file wchan ada di sistem Anda (saya lupa di mana itu dan apa namanya) , WCHANbidang tersebut akan menunjukkan kepada Anda apa fungsi kernel proses saat ini sedang berjalan (jika bidang hanya menunjukkan -atau ?semuanya, Anda tidak memiliki dukungan).
Sedikit google di sini dan Anda harus berada di jalan.

Jika Anda tidak memiliki dukungan wchan, Anda selalu dapat mencoba straceproses untuk mengetahui apa yang mereka lakukan, tapi itu cara yang sulit.

Patrick
sumber
Saya biasanya hanya menekan panah kiri untuk mengubah penyortiran.
Nemo
2

Proses seumur hidup pendek seperti mengkompilasi pekerjaan atau kegagalan proses dalam satu lingkaran sering tidak terlihat dalam alat pemantauan seperti topatau iostat dan sebagainya.

Dalam kasus seperti itu, Kerangka Audit Linux akan membantu

Pelakunya, loop kegagalan misalnya

while :; do gcc /dev/zero ; done >/dev/null 2>&1

Untuk menggunakan auditd / auditctl:

apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve

dicuri dari log semua peluncuran proses

Komunitas
sumber
Jika mereka tidak muncul top, maka mereka kemungkinan tidak berkontribusi terhadap rata-rata pemuatan. Agar dapat berkontribusi pada rata-rata beban, ia harus dalam kondisi menunggu untuk jangka waktu yang lama. Secara statistik ini berarti akan muncul di top. Jika tidak, maka itu bukan kontributor yang signifikan.
Patrick
0

Saya mengalami situasi ketika NFS mounts terputus dan sayangnya saya membuat kesalahan dan tidak menggunakan opsi soft mount, dengan demikian banyak proses yang dilakukan pada server Linux saya, termasuk pemantauan, lsof, dan bahkan sesi bash ....

Setelah melepas mount yang rusak, sistem tampak kelebihan beban:

top - 00:03:48 up 15 days, 14:56,  3 users,  load average: 29, 21, 20

Ini tampak mengerikan, tetapi penggunaan CPU di bawah 15% dan tidak ada disk I / O. Saya mendapat beberapa saran untuk melalui ps, tapi ini tidak membantu karena tampaknya prosesnya kebanyakan tidur.

Kemudian man psmenyelamatkan malam saya untuk tidur, dan setelah penyelidikan saya menemukan bendera STATUS yang sangat penting untuk dilihat, karena kemudian diidentifikasi bahwa itu adalah proses yang macet .

Menjalankan:

ps -e v

dan mencari proses yang memiliki Datau SLdi kolom STAT. Ini seperti proses zombie tetapi tidak diidentifikasi sebagai Z-zombies.

D - berarti sebagian besar aktivitas disk (I / O), tetapi juga jika Anda menjalankan ps -e vbeberapa kali dan juga iostat 3dan tidak melihat aktivitas, ini menunjukkan bahwa ini macet i / o .

SL - ini berarti ada paged Terkunci dalam memori dari proses itu, jadi jika Anda dapat mengidentifikasi bahwa proses ini tidak boleh berperilaku seperti ini, itu kemungkinan kandidat berikutnya jika tetap untuk periode yang lebih lama tanpa perubahan.

Setelah penyelidikan saya kemudian membunuh satu per satu, dan rata-rata beban sistem saya menjadi normal.

Arunas Bartisius
sumber