Quel processus utilise tout mon disque IO


120

Si j'utilise "top", je peux voir quel CPU est occupé et quel processus utilise tout mon CPU.

Si j'utilise "iostat -x", je peux voir quel lecteur est occupé.

Mais comment voir quel processus utilise tout le débit du disque?


2
Eh bien, techniquement, cela est également vrai pour Linux, puisque les processus utilisateur ne modifient que les pages du cache de pages ...;)
Damon

Juste la question que j'avais et la réponse que je cherchais mais ce genre de question ne convient-il pas mieux à SuperUser?
Zeta Two

Et c'est pourquoi Linux est inférieur à Solaris et MacOS parce qu'ils ont dtrace intégré qui rend cela trivialement simple à découvrir: - /
Thorbjørn Ravn Andersen

Réponses:


162

Vous recherchez iotop(en supposant que vous ayez un noyau> 2.6.20 et Python 2.5). À défaut, vous cherchez à vous connecter au système de fichiers. Je recommande l'ancien.


8
iotopsemble indiquer la bande passante d'E / S plutôt que le nombre d'IOPS consommées par les processus. Ce n'est pas super pertinent. Un processus faisant beaucoup de petites écritures + synchronisation va consommer plus de la capacité d'E / S du disque qu'un processus écrivant un grand lot contigu de données à grande vitesse.
Arnaud Le Blanc

Pour les petites écritures, tout ce que j'ai vu était [jdb2/nvme0n1p1]dans iotop, mais j'ai eu de la chance en activant / proc / sys / vm / block_dump et en comparant la sortie à un système sain / stable lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/ ... Cela a aidé à trouver un conteneur docker qui engendrait continuellement des requêtes kubectl, épuisant les crédits de rafale d'un volume EBS avec des entrées dans /home/spinnaker/.kube/cache/discovery/.../serverresources.json. Une fois que vous avez réduit les choses à un nom d'utilisateur / processus, quelque chose comme iotop -atku systemd-network | grep kubectlpeut également aider
Greg Bray

16

Pour savoir quels processus à l'état 'D' (en attente de réponse du disque) sont en cours d'exécution:

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

ou

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]

Comme vous pouvez le voir dans le résultat, le jdb2 / dm-0-8 (processus de journal ext4) et kdmflush bloquent constamment votre Linux.

Pour plus de détails, cette URL pourrait être utile: Linux Wait-IO Problem


11

atop fonctionne également bien et s'installe facilement même sur les anciens systèmes CentOS 5.x qui ne peuvent pas exécuter iotop. Appuyez sur dpour afficher les détails du disque, ?pour obtenir de l'aide.

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

Cela montre clairement que java pid 9862 est le coupable.


4

TL; DR

Si vous pouvez utiliser iotop, faites-le. Sinon, cela pourrait aider.


Utilisez top, puis utilisez ces raccourcis:

d 1 = set refresh time from 3 to 1 second

1   = show stats for each cpu, not cumulated

Cela doit afficher les valeurs > 1.0 wad'au moins un cœur - s'il n'y a pas d'attente de disque, il n'y a simplement pas de charge d'E / S et il n'est pas nécessaire de chercher plus loin. Des charges importantes commencent généralement > 15.0 wa.

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

Choisissez «S», la colonne d'état du processus. Inversez l'ordre de tri pour que les processus «R» (en cours d'exécution) soient affichés en haut. Si vous pouvez repérer les processus «D» (en attente de disque), vous avez un indicateur de votre coupable.


3

Pour les utilisateurs de KDE, vous pouvez utiliser «ctrl-esc» pour appeler un moniteur d'activité du système et il y a des graphiques d'activités d'E / S avec l'identifiant et le nom du processus.

Je n'ai pas les autorisations pour télécharger l'image, en raison du «statut du nouvel utilisateur», mais vous pouvez consulter l'image ci-dessous. Il a une colonne pour la lecture et l'écriture d'E / S.


2

Avez-vous envisagé lsof(lister les fichiers ouverts)?


3
qui montre simplement les descripteurs de fichiers ouverts, pas les Mo / s pour chaque fichier. iotop fait cela.
oligofren

2

iotop avec l'indicateur -a:

-a, --accumulated     show accumulated I/O instead of bandwidth
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.