Bagaimana saya bisa tahu proses apa yang menyebabkan beban tinggi jika tidak digunakan dengan CPU yang tinggi?

12

Kadang-kadang server saya akan menampilkan rata-rata beban tinggi dalam program "atas" (mis. Memuat ~ 10 pada mesin 4-core), tetapi penggunaan CPU yang sebenarnya tidak terlalu tinggi.

Saya berasumsi masalahnya adalah bahwa ada banyak pekerjaan intensif I / O berjalan. Apakah ada cara mudah untuk mengidentifikasi pekerjaan ini yang menyebabkan beban, jika nilai "% CPU" mereka di atas tidak setinggi itu?

Lorin Hochstein
sumber
Bisakah Anda menempelkan area ringkasan yang Anda lihat ketika Anda menjalankan topperintah?
mfriedman

Jawaban:

7

iostatdapat melaporkan statistik seperti itu. Biasanya termasuk dalam distro Anda dalam paket sysstat.

dstat juga layak untuk dilihat, ini adalah pengganti modern.

sleske
sumber
+1 karena iostatakan menjadi jawaban saya .
Ernie
4

Jika Anda memiliki akuntansi IO di kernel Anda, maka Anda dapat menggunakannya iotopuntuk memberikan informasi seperti itu. Juga, alat pemantauan seperti collectd dapat merekam dan melaporkan data.

David Spillett
sumber
4

Untuk menemukan apa yang menyebabkan beban tinggi, Anda dapat memeriksa beberapa hal.

  • vmstat -w akan menunjukkan kepada Anda ovierwiem (proses, swap, mem, cpu, io, sistem)
  • pmstat -P ALL akan memberikan Anda statistik (dengan% iowait) per inti cpu
  • iostat -x mencari util% tinggi atau lama menunggu atau ukuran antrian rata-rata besar
    • menggali lebih dalam dengan iotop
  • ps -ax cari status D yang tidak dapat diganggu tidur (biasanya IO), jalankan sekali lagi periksa apakah masih dalam kondisi D
    • gali lebih dalam dengan strace
    • periksa file dan koneksi proses-proses tersebut dengan lsof dan netstat
  • sar / sysstat - dengan alat itu Anda dapat menjelajahi tidak hanya statistik "sekarang" tetapi juga memeriksa apa yang terjadi kemarin di tengah malam
    • sar -b - keseluruhan aktivitas io
    • sar -d - Kegiatan individu blok perangkat io
3h4x
sumber