GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memeriksa penggunaan I/O disk per proses?

Solusi 1:

Jika Anda cukup beruntung untuk mengetahui periode penggunaan puncak berikutnya, Anda dapat mempelajari statistik I/O per proses secara interaktif, menggunakan iotop.

Solusi 2:

Anda dapat menggunakan pidstat untuk mencetak statistik io kumulatif per proses setiap 20 detik dengan perintah ini:

# pidstat -dl 20

Setiap baris akan memiliki kolom berikut:

  • PID - ID proses
  • kB_rd/s - Jumlah kilobyte yang disebabkan tugas untuk dibaca dari disk per detik.
  • kB_wr/s - Jumlah kilobyte yang ditimbulkan oleh tugas, atau akan menyebabkan ditulis ke disk per detik.
  • kB_ccwr/s - Jumlah kilobyte yang penulisannya ke disk telah dibatalkan oleh tugas. Ini dapat terjadi ketika tugas memotong beberapa pagecache yang kotor. Dalam hal ini, beberapa IO yang tugas lainnya telah diperhitungkan tidak akan terjadi.
  • Perintah - Nama perintah tugas.

Keluaran terlihat seperti ini:

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]              

Solusi 3:

Tidak ada yang mengalahkan pemantauan berkelanjutan, Anda tidak bisa mendapatkan kembali data sensitif waktu setelah acara...

Ada beberapa hal yang mungkin Anda lakukan namun dapat memeriksa untuk melibatkan atau menghilangkan — /proc adalah temanmu.

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

Bidang 10, 11 adalah akumulasi sektor tertulis, dan akumulasi waktu (ms) penulisan. Ini akan menampilkan partisi sistem file panas Anda.

cut -d" " -f 1,2,42 /proc/[0-9]*/stat | sort -n -k +3

Bidang-bidang itu adalah kutu PID, perintah, dan kumulatif IO-tunggu. Ini akan menampilkan proses panas Anda, meskipun hanya jika masih berjalan . (Anda mungkin ingin mengabaikan utas penjurnalan sistem file Anda.)

Kegunaan di atas tergantung pada waktu aktif, sifat proses Anda yang berjalan lama, dan bagaimana sistem file Anda digunakan.

Peringatan:tidak berlaku untuk kernel pra-2.6, periksa dokumentasi Anda jika tidak yakin.

(Sekarang, pergi dan bantulah masa depan Anda sendiri, instal Munin/Nagios/Cacti/terserah;-)

Solusi 4:

Gunakan atop . (http://www.atoptool.nl/)

Tulis data ke file terkompresi yaitu atop dapat dibaca nanti dengan gaya interaktif. Lakukan pembacaan (delta) setiap 10 detik. lakukan 1080 kali (3 jam; jadi jika Anda melupakannya, file keluaran tidak akan membuat Anda kehabisan disk):

$ atop -a -w historical_everything.atop 10 1080 &

Setelah hal buruk terjadi lagi:

(meskipun masih berjalan di latar belakang, itu hanya ditambahkan setiap 10 detik)

% atop -r historical_everything.atop

Karena Anda mengatakan IO, saya akan menekan 3 tombol:tdD

t - move forward to the next data gathering (10 seconds)
d - show the disk io oriented information per process
D - sort the processes based on disk activity
T - go backwards 1 data point (10 seconds probably)
h - bring up help
b - jump to a time (nearest prior datapoint) - e.g. b12:00 - only jumps forward
1 - display per second instead of delta since last datapiont in the upper half of the display

Solusi 5:

Gunakan btrace . Mudah digunakan, misalnya btrace /dev/sda . Jika perintah tidak tersedia, mungkin tersedia dalam paket blktrace .

EDIT :Karena debugfs tidak diaktifkan di kernel, Anda dapat mencoba date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf atau serupa. Mencatat kesalahan halaman tentu saja tidak sama dengan menggunakan btrace, tetapi jika Anda beruntung, ini MUNGKIN memberi Anda beberapa petunjuk tentang proses yang paling membutuhkan disk. Saya baru saja mencobanya di salah satu server I/O saya yang paling intensif dan daftarnya menyertakan proses yang saya tahu memakan banyak I/O.


Linux
  1. Linux – Bagaimana Cara Memantau Disk I/o Di Direktori Tertentu?

  2. Bagaimana Cara Mengecek Penggunaan Bandwidth VPS?

  3. Cara Menentukan Proses Yang Menulis ke Disk di Linux

  1. Bagaimana Cara Throttle Per Proses I/o Hingga Batas Maks?

  2. Bagaimana Anda melakukan non-blocking console I/O di Linux di C?

  3. Di linux, bagaimana Anda memeriksa apakah sebuah disk terfragmentasi?

  1. Bagaimana Cara Memeriksa Sinyal Apa yang Didengarkan oleh Proses?

  2. Bermigrasi ke server Tujuan Umum atau I/O

  3. Bagaimana cara menghentikan proses 'tidak terputus' di Linux?