Welcher Prozess verwendet alle meine Festplatten-E / A.

120

Wenn ich "top" verwende, kann ich sehen, welche CPU ausgelastet ist und welcher Prozess meine gesamte CPU verwendet.

Wenn ich "iostat -x" verwende, kann ich sehen, welches Laufwerk ausgelastet ist.

Aber wie sehe ich, welcher Prozess den gesamten Durchsatz des Laufwerks nutzt?

Matthew Crumley
quelle
2
Nun, technisch gesehen gilt das auch für Linux, da Benutzerprozesse nur Seiten im Seitencache ändern ...;)
Damon
Nur die Frage, die ich hatte und die Antwort, nach der ich gesucht habe, aber passt diese Art von Frage nicht besser zu SuperUser?
Zeta zwei
Und aus diesem Grund ist Linux Solaris und MacOS unterlegen, da sie über eine integrierte Dtrace verfügen, die es trivial einfach macht, dies herauszufinden: - /
Thorbjørn Ravn Andersen

Antworten:

162

Sie suchen iotop(vorausgesetzt, Sie haben Kernel> 2.6.20 und Python 2.5). Andernfalls möchten Sie sich in das Dateisystem einbinden. Ich empfehle das erstere.

Phresus
quelle
8
iotopscheint eher die E / A-Bandbreite als die Anzahl der von Prozessen verbrauchten E / A anzuzeigen. Das ist nicht besonders relevant. Ein Prozess, der viele kleine Schreibvorgänge + Synchronisierung ausführt, verbraucht mehr E / A-Kapazität der Festplatte als ein Prozess, der einen großen zusammenhängenden Datenstapel mit hoher Geschwindigkeit schreibt.
Arnaud Le Blanc
Für kleinen Schreib war alles , was ich sehe [jdb2/nvme0n1p1]in iotop, aber ich hatte Glück mit Aktivierungs- / proc / sys / vm / block_dump und der Ausgabe zu einem gesunden / stabilen System zu vergleichen lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/... Es half Fund Ein Docker-Container, der ständig Kubectl-Anfragen erzeugt und die Burst-Credits eines EBS-Volumes mit Einträgen in erschöpft /home/spinnaker/.kube/cache/discovery/.../serverresources.json. Sobald Sie die Dinge auf einen Benutzer- / Prozessnamen eingegrenzt haben, iotop -atku systemd-network | grep kubectlkann auch etwas helfen
Greg Bray vor
16

So finden Sie heraus, welche Prozesse im Status 'D' (Warten auf Festplattenantwort) derzeit ausgeführt werden:

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

oder

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]

Wie Sie dem Ergebnis entnehmen können, blockieren der jdb2 / dm-0-8 (ext4-Journalprozess) und kdmflush Ihr Linux ständig.

Für weitere Details könnte diese URL hilfreich sein: Linux Wait-IO Problem

Quentinxue
quelle
11

atop funktioniert auch gut und lässt sich auch auf älteren CentOS 5.x-Systemen, auf denen iotop nicht ausgeführt werden kann, problemlos installieren. Klicken Sie hier d, um Details zur Festplatte anzuzeigen ?.

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

Dies zeigt deutlich, dass Java Pid 9862 der Schuldige ist.

Steve Kehlet
quelle
4

TL; DR

Wenn Sie verwenden können iotop, tun Sie dies. Sonst könnte dies helfen.


Verwenden Sie topund verwenden Sie dann diese Verknüpfungen:

d 1 = set refresh time from 3 to 1 second

1   = show stats for each cpu, not cumulated

Dies muss Werte > 1.0 wafür mindestens einen Kern anzeigen - wenn keine Diskwaits vorhanden sind, gibt es einfach keine E / A-Last und Sie müssen nicht weiter suchen. In der Regel beginnen erhebliche Belastungen > 15.0 wa.

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

Wählen Sie 'S', die Prozessstatusspalte. Kehren Sie die Sortierreihenfolge um, sodass die 'R'-Prozesse (laufende Prozesse) oben angezeigt werden. Wenn Sie D-Prozesse erkennen können (auf Festplatte warten), haben Sie einen Indikator dafür, was Ihr Schuldiger sein könnte.

sjas
quelle
3

Für KDE-Benutzer können Sie 'ctrl-esc' verwenden, um einen Systemaktivitätsmonitor aufzurufen, und es gibt E / A-Aktivitätsdiagramme mit Prozess-ID und Name.

Ich habe aufgrund des Status "Neuer Benutzer" keine Berechtigung zum Hochladen von Bildern, aber Sie können das Bild unten überprüfen. Es hat eine Spalte zum Lesen und Schreiben von E / A.

Patrick
quelle
2

Haben Sie darüber nachgedacht lsof(offene Dateien auflisten)?

apolinsky
quelle
3
Das zeigt nur geöffnete Dateihandles, nicht MB / s für jede Datei. iotop macht das.
Oligofren
2

iotop mit der Flagge -a:

-a, --accumulated     show accumulated I/O instead of bandwidth
Chris Godwin
quelle