Iiotop olmadan hangi işlemin I / O yaptığını bilin


12

Linux'ta hangi işlemin disk G / Ç bant genişliğimi kullandığını bilmek istiyorum.

Kullanabileceğimi biliyorum, iotopancak çeşitli nedenlerle iotopkurulamayan bir makinem var.

Bu bilgileri manuel olarak nasıl alabilirim? ( iotopKendisi nasıl ilerliyor?)

Yanıtlar:


15

İçindeki dosya /proc/<pid>/ioneye 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>/iodosya 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 bashkomut 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

$delayAraları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 grepiçin listelerde komut wcharyerine 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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.