Bagaimana saya bisa memonitor beban hard disk di Linux?

101

Apakah ada utilitas baris perintah yang baik untuk memantau beban hard disk di linux? Sesuatu seperti toptapi kemudian memantau aktivitas penggunaan disk iso cpu.

Lebih khusus lagi, saya menduga bahwa untuk beberapa server (beban berat) setelah beberapa optimasi pada berbagai bagian program yang berjalan di atasnya, sekarang bottleneck hanyalah logging ke file pada disk. Tetapi saya merasa sangat sulit untuk menilai seberapa banyak lalu lintas yang dapat ditangani oleh server.

Alat ideal saya akan menjadi sesuatu yang mencetak "Anda menggunakan 35% dari bandwidth disk Anda sekarang". Ada ide?

Pieter
sumber
1
Pertanyaan sempurna, persis apa yang saya cari =)
rafa.ferreira
Mungkin untuk membaca sysfs secara langsung, seperti /sys/block/sda/stat. Kolom # 1 memberikan total # dari bacaan, bidang # 5 adalah total # dari penulisan, bidang # 9 adalah jumlah operasi I / O yang sedang berlangsung. Lihat lebih lanjut di kernel.org/doc/Documentation/iostats.txt Nilai-nilainya tidak ditandai lama dan mungkin terbungkus.
sastanin
Ini adalah pertanyaan yang sangat bagus karena kami selalu berjuang dengan masalah ini di server Plesk. Namun, yang hilang adalah how do you do it with SNMP?. Tidak apa-apa untuk masuk dan memeriksa hal-hal, tetapi yang benar-benar membutuhkan data historis.
Eugene van der Merwe
unix.stackexchange.com/questions/55212/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

83

Anda bisa mendapatkan ukuran yang cukup baik dari ini menggunakan iostatalat ini.

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

Pemanfaatan disk tercantum di kolom terakhir. Ini didefinisikan sebagai

Persentase waktu CPU selama permintaan I / O dikeluarkan untuk perangkat (pemanfaatan bandwidth untuk perangkat). Saturasi perangkat terjadi ketika nilai ini mendekati 100%.

Dave Cheney
sumber
3
Dalam paket apa ini berada di Debian, jika ada? apt-cache dumptidak mengubah apa pun untuk iostat
hBy2Py
9
@ Brian: Ada dalam paket sysstat (toh yum ...)
Joe
Tidak dapat menemukan ini di RHEL 6.5. Apakah ini tersedia untuk RHEL?
Hazok
Bisakah ini bekerja tanpa harus melanjutkan dengan penundaan? Mencoba menjalankan satu instance untuk mendapatkan data dari mendapatkan nomor yang sama mungkin karena tidak dapat mengambil sampel ???
Wilf
@Hazok Ini adalah bagian dari RPM sysstat di RHEL 6.5.
TheGeneral
81

iotop adalah versi top yang melihat seberapa banyak IO yang digunakan setiap proses. Ada dalam repositori standar ubuntu; Saya tidak tahu apakah itu di RHEL atau Fedora, tetapi seharusnya begitu.

masukkan deskripsi gambar di sini

Untuk kernel yang lebih lama (misalkan CentOS 5.x atau RHEL 5.x) yang tidak mendukung iotop, gunakan topio sebagai gantinya (didokumentasikan di sini: http://yong321.freeshell.org/freeware/pio.html#linux . Ini bergantung pada / proc // io untuk statistik io dan menyediakan fungsionalitas yang mirip dengan iotop. Lihat tautan untuk perincian lebih lanjut.

Tim Howland
sumber
1
Memang, itu tidak diinstal secara default di Ubuntu, jadi orang bisa mengeluarkan: sudo apt-get install iotop untuk mendapatkannya
Moshe
1
iotop membutuhkan kernel yang lebih tinggi dari 2.6.20, yang sayangnya mengesampingkan RedHat el4 dan el5.
Dave Cheney
2
Pada RedHat 5.4, bit yang diperlukan untuk membuat pekerjaan iotop telah di-backport. Nikmati!
Dave Cheney
Itu di Fedora :).
jamie
13

Seperti yang disarankan oleh sastanin dalam komentar, Anda dapat memproses langsung nilai yang diberikan dalam /sys/block/sda/statatau /proc/diskstats. Ini mungkin membantu ketika tidak ada alat lain yang disebutkan tersedia dan Anda tidak dapat menginstalnya dengan mudah.

Misalnya (IIUC) sesuatu seperti ini (dalam bash) harus memberikan jumlah pembacaan per detik:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

Lihat https://www.kernel.org/doc/Documentation/iostats.txt dan https://www.kernel.org/doc/Documentation/block/stat.txt untuk dokumentasi.

Skippy le Grand Gourou
sumber
7

Anda harus melihat di atas , yang menggabungkan kekuatan iotop / top / iftop, semuanya di satu tempat, dan menyoroti bagian-bagian penting pada sistem Anda.

Yvan
sumber
5

Saya akan merekomendasikan untuk melihat alat nmon. Ini akan menunjukkan kepada Anda beban langsung pada sejumlah parameter sistem dan juga merekam data ke file untuk pembacaan selanjutnya. Ini alat gratis yang tersedia di sini :

MikeyB
sumber
5

untuk mengetahui berapa total bandwidth Anda, Anda dapat menggunakan hdparm -T /dev/sdauntuk menguji kinerja cache buffer (fileio) hdparm -t /dev/sdauntuk menguji kinerja perangkat yang dibaca

contoh: laptop saya mendapat 82MB / detik dari disk SATA dan 2GB / detik dari cache. Dekstop saya mendapatkan 12GB / detik dari cache dan 500MB / detik dari array HW RAID. Saya menduga angka-angka terakhir bisa menjadi dua kali lipat pada perangkat keras kelas server.

atur readahead lebih tinggi dari 256, 4096 paling cocok untuk saya

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

kali membaca 1GB pada ukuran blok yang berbeda dan berbagai baca-depan

pengguna2987
sumber
Selamat datang di SF. Anda dapat menggunakan penyorotan kode dalam posting Anda dengan menempatkan tanda kutip di belakang string atau indentasi paragraf.
ℝaphink
Dua hal - 1) --setrasekarang -a, dan 2), hdparm -{T,t}perintah hanya mengeluarkan disk yang dibaca, menurut strace, jadi tidak rusak. (Penafian standar tentang saran di Internet berlaku)
i336_
4

Alat standar untuk menampilkan beban hard disk adalah iostat.

Itu tidak akan memberi tahu Anda berapa banyak usia disk bandwidth yang Anda gunakan, karena tidak tahu berapa banyak bandwidth yang dimiliki disk Anda. Bagaimanapun, disk Anda hanya memiliki angka yang dikutip dari pabrikan untuk transfer besar data yang berdekatan.

Alnitak
sumber
3

Saya pikir RRDtool harus melakukan apa yang Anda inginkan di sini menggunakan daemon untuk membuang data sistem dan kemudian memungkinkan Anda untuk memprosesnya sesuka Anda. Saya sering menggunakannya untuk menghasilkan grafik dll untuk mengukur beban sistem.

PixelSmack
sumber