Yanıtlar:
İçindeki dosya /proc/<pid>/io
neye ihtiyacınız olduğunu gösterir. Benzer bir çıktı almak için biraz komut dosyası çalışması iotop
. Bkz Linux çekirdek belgelerine göre /proc/<pid>/io
dosya değerlerine:
rchar
G / Ç sayacı: karakter okuma Bu görevin depodan okunmasına neden olduğu bayt sayısı. Bu basitçe bu işlemin read () ve pread () 'e ilettiği baytların toplamıdır. Bu, tty IO gibi şeyleri içerir ve gerçek fiziksel disk IO'nun gerekli olup olmadığından etkilenmez (okuma, pagecache'den tatmin olmuş olabilir)
wchar
G / Ç sayacı: yazılan karakter sayısı Bu görevin neden olduğu veya diske yazılması gereken bayt sayısı. Benzer uyarılar burada rchar'da olduğu gibi geçerlidir.
[...]
read_bytes
G / Ç sayacı: bayt okuma Bu işlemin depolama katmanından gerçekten alınmasına neden olan bayt sayısını saymaya çalışır. Submit_bio () düzeyinde yapılır, bu nedenle blok destekli dosya sistemleri için doğrudur.
write_bytes
G / Ç sayacı: yazılan baytlar Bu işlemin depolama katmanına gönderilmesine neden olan bayt sayısını saymaya çalışır. Bu sayfa kirlenme zamanında yapılır.
Şimdi, bu küçük bash
komut dosyasını kullanabilirsiniz :
#!/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
$delay
Aralarında 2 saniye gecikmeli ( : in- ya da azaltılabilir) iki liste oluşturur ve ardından listeleri karşılaştırır ve farklılıkları hesaplar. En çok G / Ç bulunan 10 işlem, G / Ç bant genişlikleri ile son 2 saniyede yazdırılır. Eğer G / Ç yerine okunmuş yazma istiyorsanız G / Ç sadece düzenleme grep
için listelerde komut wchar
yerine 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)