Hangi İşlem disk G / Ç'imin tamamını kullanıyor


120

"Top" kullanırsam, hangi CPU'nun meşgul olduğunu ve hangi işlemin tüm CPU'mu kullandığını görebilirim.

"İostat -x" kullanırsam hangi sürücünün meşgul olduğunu görebilirim.

Ancak hangi işlemin sürücünün tüm verimini kullandığını nasıl görebilirim?


2
Eh, teknik olarak bu Linux için de geçerlidir, çünkü kullanıcı işlemleri yalnızca sayfa önbelleğindeki sayfaları değiştirir ...;)
Damon

Sadece sahip olduğum soru ve aradığım cevap ama bu tür sorular SuperUser'a daha iyi uymuyor mu?
Zeta Two

Ve işte bu yüzden Linux, Solaris ve MacOS'tan daha düşüktür çünkü yerleşik dtrace'e sahiptirler ve bunu öğrenmeyi önemsiz bir şekilde basitleştirir: - /
Thorbjørn Ravn Andersen

Yanıtlar:


162

iotop(Çekirdek> 2.6.20 ve Python 2.5'e sahip olduğunuzu varsayarak) arıyorsunuz . Başaramazsanız, dosya sistemine bağlanmayı düşünüyorsunuz. Birincisini tavsiye ederim.


8
iotopişlemler tarafından tüketilen IOPS sayısından ziyade G / Ç bant genişliğini gösteriyor gibi görünüyor. Bu çok alakalı değil. Çok sayıda küçük yazma + eşitleme yapan bir işlem, yüksek hızda büyük bir bitişik veri yığını yazan bir işlemden daha fazla diskin GÇ kapasitesini tüketecektir.
Arnaud Le Blanc

Küçük yazılar için tek gördüğüm şey [jdb2/nvme0n1p1]iotop'taydı, ancak / proc / sys / vm / block_dump'ı etkinleştirmek ve çıktıyı sağlıklı / kararlı bir sistemle karşılaştırmak konusunda şanslıydım lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/… Bulmaya yardımcı oldu sürekli olarak kubectl istekleri üreten ve girişlerle birlikte bir EBS biriminin patlama kredilerini tüketen bir docker container /home/spinnaker/.kube/cache/discovery/.../serverresources.json. İşleri bir kullanıcı / işlem adıyla daralttığınızda buna benzer bir şey iotop -atku systemd-network | grep kubectlde yardımcı olabilir
Greg Bray

16

'D' durumundaki (disk yanıtı bekleniyor) hangi işlemlerin şu anda çalıştığını bulmak için:

while true; do date; ps aux | awk '{if($8=="D") print $0;}'; sleep 1; done

veya

watch -n1 -d "ps axu | awk '{if (\$8==\"D\") {print \$0}}'"

Wed Aug 29 13:00:46 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:47 CLT 2012
Wed Aug 29 13:00:48 CLT 2012
Wed Aug 29 13:00:49 CLT 2012
Wed Aug 29 13:00:50 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:51 CLT 2012
Wed Aug 29 13:00:52 CLT 2012
Wed Aug 29 13:00:53 CLT 2012
Wed Aug 29 13:00:55 CLT 2012
Wed Aug 29 13:00:56 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:57 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:58 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:59 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:00 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:01 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:02 CLT 2012
Wed Aug 29 13:01:03 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]

Sonuçtan da görebileceğiniz gibi, jdb2 / dm-0-8 (ext4 günlük süreci) ve kdmflush Linux'unuzu sürekli olarak bloke ediyor.

Daha fazla ayrıntı için bu URL yardımcı olabilir: Linux Wait-IO Problem


11

atop ayrıca iyi çalışır ve iotop çalıştıramayan eski CentOS 5.x sistemlerinde bile kolayca kurulur. Hit ddisk ayrıntıları göstermek için ?yardım.

ATOP - mybox                           2014/09/08  15:26:00                           ------                            10s elapsed
PRC |  sys    0.33s |  user   1.08s |                | #proc    161  |  #zombie    0 |  clones    31 |                | #exit         16  |
CPU |  sys   4% |  user     11% |  irq       0%  | idle    306%  |  wait     79% |               |  steal     1%  | guest     0%  |
cpu |  sys   2% |  user      8% |  irq       0%  | idle     11%  |  cpu000 w 78% |               |  steal     0%  | guest     0%  |
cpu |  sys   1% |  user      1% |  irq       0%  | idle     98%  |  cpu001 w  0% |               |  steal     0%  | guest     0%  |
cpu |  sys   1% |  user      1% |  irq       0%  | idle     99%  |  cpu003 w  0% |               |  steal     0%  | guest     0%  |
cpu |  sys   0% |  user      1% |  irq       0%  | idle     99%  |  cpu002 w  0% |               |  steal     0%  | guest     0%  |
CPL |  avg1    2.09 |  avg5    2.09 |  avg15   2.09  |               |  csw    54184 |  intr   33581 |                | numcpu     4  |
MEM |  tot     8.0G |  free   81.9M |  cache   2.9G  | dirty   0.8M  |  buff  174.7M |  slab  305.0M |                |               |
SWP |  tot     2.0G |  free    2.0G |                |               |               |               |  vmcom   8.4G  | vmlim   6.0G  |
LVM |  Group00-root |  busy     85% |  read       0  | write  30658  |  KiB/w      4 |  MBr/s   0.00 |  MBw/s  11.98  | avio 0.28 ms  |
DSK |          xvdb |  busy     85% |  read       0  | write  23706  |  KiB/w      5 |  MBr/s   0.00 |  MBw/s  11.97  | avio 0.36 ms  |
NET |  transport    |  tcpi    2705 |  tcpo    2008  | udpi      36  |  udpo      43 |  tcpao     14 |  tcppo     45  | tcprs      1  |
NET |  network      |  ipi     2788 |  ipo     2072  | ipfrw      0  |  deliv   2768 |               |  icmpi      7  | icmpo     20  |
NET |  eth0    ---- |  pcki    2344 |  pcko    1623  | si 1455 Kbps  |  so  781 Kbps |  erri       0 |  erro       0  | drpo       0  |
NET |  lo      ---- |  pcki     423 |  pcko     423  | si   88 Kbps  |  so   88 Kbps |  erri           0 |  erro       0  | drpo       0  |
NET |  eth1    ---- |  pcki  22 |  pcko      26  | si    3 Kbps  |  so    5 Kbps |  erri       0 |  erro       0  | drpo       0  |

  PID                   RDDSK                    WRDSK                   WCANCL                    DSK                   CMD        1/1
 9862                      0K                   53124K                       0K                    98%                   java
  358                      0K                     636K                       0K                     1%                   jbd2/dm-0-8
13893                      0K                     192K                      72K                     0%                   java
 1699                      0K                      60K                       0K                     0%                   syslogd
 4668                      0K                      24K                       0K                     0%                   zabbix_agentd

Bu açıkça gösteriyor ki, suçlu java pid 9862.


4

TL; DR

Kullanabiliyorsanız iotop, kullanın . Aksi takdirde bu yardımcı olabilir.


Kullanın top, ardından şu kısayolları kullanın:

d 1 = set refresh time from 3 to 1 second

1   = show stats for each cpu, not cumulated

Bu, > 1.0 waen az bir çekirdek için değerleri göstermelidir - disk beklemede değilse, hiçbir GÇ yükü yoktur ve daha fazla bakmaya gerek yoktur. Genellikle önemli yükler başlar > 15.0 wa.

x       = highlight current sort column 
< and > = change sort column
R       = reverse sort order

İşlem durumu sütunu olan 'S'yi seçin. Sıralama düzenini tersine çevirin, böylece 'R' (çalışan) işlemler en üstte gösterilir. 'D' süreçlerini (diski beklerken) tespit ederseniz, suçlunuzun ne olabileceğine dair bir göstergeye sahip olursunuz.


3

KDE Kullanıcıları için 'ctrl-esc' kullanarak bir sistem etkinlik izleyicisini çağırabilirsiniz ve işlem kimliği ve adı olan G / Ç etkinlik çizelgeleri vardır.

'Yeni kullanıcı durumu' nedeniyle resim yükleme iznim yok, ancak aşağıdaki resme bakabilirsiniz. IO okuma ve yazma için bir sütunu vardır.


2

Düşündünüz mü lsof(açık dosyaları listeleyin)?


3
bu sadece açık dosya tanıtıcılarını gösterir, her dosya için MB / s'yi göstermez. iotop bunu yapar.
oligofren

2

-a bayraklı iotop:

-a, --accumulated     show accumulated I/O instead of bandwidth
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.