File dalam /proc/<pid>/io
mewakili apa yang Anda butuhkan. Ini adalah pekerjaan scripting yang sedikit untuk mendapatkan hasil yang serupa iotop
. Lihat dokumentasi kernel linux untuk nilai /proc/<pid>/io
file:
rchar
Penghitung I / O: karakter membaca Jumlah byte yang tugas ini menyebabkan harus dibaca dari penyimpanan. Ini hanyalah jumlah byte yang proses ini dilewati untuk membaca () dan pread (). Ini termasuk hal-hal seperti tty IO dan tidak terpengaruh oleh apakah IO disk fisik yang sebenarnya diperlukan atau tidak (bacaan mungkin telah dipenuhi dari pagecache)
wchar
Penghitung I / O: karakter yang ditulis Jumlah byte yang disebabkan oleh tugas ini, atau akan menyebabkan ditulis ke disk. Peringatan serupa berlaku di sini seperti dengan rchar.
[...]
read_bytes
Penghitung I / O: byte membaca Mencoba untuk menghitung jumlah byte yang benar-benar menyebabkan proses ini diambil dari lapisan penyimpanan. Dilakukan pada tingkat submit_bio (), sehingga akurat untuk sistem file yang didukung blok.
write_bytes
Penghitung I / O: byte yang ditulis Coba untuk menghitung jumlah byte yang menyebabkan proses ini dikirim ke lapisan penyimpanan. Ini dilakukan pada saat halaman-kotor.
Sekarang, Anda dapat menggunakan bash
skrip kecil itu :
#!/bin/bash
if [ "$(id -u)" -ne 0 ] ; then
echo "Must be root" 2>&1
exit 1
fi
delay=2
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
while :; do
echo "-----"
listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
echo "$lista" | while read -r pida xa bytesa; do
[ -e "/proc/$pida" ] || continue
echo -en "$pida:\t"
bytesb=$(echo "$listb" | awk -v pid=$pida '$1==pid{print $3}')
echo "$((($bytesb - $bytesa) / $delay)) b/s"
done | sort -nk2 | tail
sleep $delay
listb=$lista
done
Itu membuat dua daftar dengan penundaan 2 detik ( $delay
: bisa di- atau dikurangi) di antara mereka, dan kemudian membandingkan daftar dan menghitung perbedaan. 10 proses dengan I / O terbanyak dicetak dengan bandwidth I / O mereka dalam 2 detik terakhir. Jika Anda ingin menulis I / O alih-alih membaca I / O, cukup edit grep
perintah di daftar wchar
bukan rchar
:
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)
listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)