Ich interessiere mich für ein Dienstprogramm oder einen Prozess zum Überwachen von Festplatten-E / A pro Datei unter CentOS.
Unter Win2008 ermöglicht das Dienstprogramm resmon diese Art von Drilldown, aber keines der von mir gefundenen Linux-Dienstprogramme (iostat, iotop, dstat, nmon).
Mein Interesse an der Überwachung von E / A-Engpässen auf Datenbankservern. Mit MSSQL habe ich festgestellt, dass es eine informative Diagnose ist, zu wissen, welche Dateien / Dateibereiche am härtesten betroffen sind.
Antworten:
SystemTap ist wahrscheinlich die beste Option.
So sieht die Ausgabe des Beispiels iotime.stp aus:
Der Nachteil (abgesehen von der Lernkurve) ist, dass Sie das Kernel-Debug installieren müssen , was auf einem Produktionssystem möglicherweise nicht möglich ist. Sie können jedoch auf instrumentenübergreifende Methoden zurückgreifen, bei denen Sie ein Modul auf einem Entwicklungssystem kompilieren und diese .ko-Datei auf dem Produktionssystem ausführen .
Wenn Sie ungeduldig sind, lesen Sie Kapitel 4. Nützliche SystemTap-Skripte aus dem Einsteigerhandbuch.
quelle
SystemTap * -Skript :
Die Ausgabe sieht folgendermaßen aus:
Oder wenn Sie nur den Pfad vom Einhängepunkt anzeigen möchten:
Einschränkungen / Bugs:
devname
ist"N/A"
devname
ist"N/A"
Die Ergebnisse für Matthew Ife 's Programme:
für mmaptest privat:
für mmaptest geteilt:
für diotest (direkte I / O):
* Schnellinstallationsanleitung für RHEL 6 oder gleichwertig:
yum install systemtap
unddebuginfo-install kernel
quelle
task_dentry_path
) entdeckt :-) Ich habe keine Ahnung von diesem I / O, aber ich kann es testen, wenn Sie mir einen Befehl geben oder ein Beispielprogramm. Zum Beispiel habe ich mit Python mmap getestet.dd iflag=direct oflag=direct
auftaucht.Sie würden eigentlich dafür verwenden wollen
blktrace
. Siehe Visualisierung von Linux IO mit Seekwatcher und blktrace .Ich werde sehen, ob ich bald eines meiner Beispiele posten kann.
Bearbeiten:
Sie erwähnen die Distribution von Linux nicht, aber vielleicht ist dies ein guter Fall für ein Dtrace-Skript unter Linux oder sogar für System Tap , wenn Sie ein RHEL-ähnliches System verwenden.
quelle
Das einzige mir bekannte Tool, das die E / A-Aktivität nach Datei überwachen kann, ist
inotifywatch
. Es ist Teil desinotify-tools
Pakets. Leider gibt es nur die Anzahl der Operationen.quelle
Verwenden Sie iotop, um die PIDs von Prozessen abzurufen, die einen hohen IO-Anteil haben
Wenn Sie strace gegen die von Ihnen generierte PID ausführen, werden Sie sehen, auf welche Dateien von einem bestimmten Prozess zugegriffen wird
quelle
Ich habe schließlich Sysdig dafür verwendet
quelle
csysdig
, drücken Sie F2 und wählen SieFiles
Ansicht. In der OPS-Spalte wird der Anfang der Dateien angezeigt, auf die zugegriffen wurde (kann durch Drücken von F9 geändert werden).csysdig -v files
geht direkt zur Ansicht "Dateien"Ich würde argumentieren, dass Sie möglicherweise die falsche Frage gestellt haben. Wenn Sie nach I / O-Engpässen suchen, ist es möglicherweise genauso wichtig zu sehen, was auf Ihrer Festplatte passiert. db's sind dafür berüchtigt, zufällige I / O-Vorgänge auszuführen, die den Durchsatz erheblich verringern können, insbesondere wenn Sie nur wenige Spindeln haben.
Interessanter ist möglicherweise, zu prüfen, ob auf den Datenträgern selbst lange Wartezeiten bestehen. Sie können dies mit collectl über den Befehl "collectl -sD" tun, der die Performance-Statistiken der einzelnen Festplatten anzeigt. Are --home, um es in ein top-ähnliches Dienstprogramm zu verwandeln. Wenn viele Festplatten betroffen sind, führen Sie es über colmux aus: colmux -command "-sD" und Sie können nach einer Spalte Ihrer Wahl sortieren, auch über mehrere Systeme hinweg.
quelle
Sie können E / A pro Blockgerät (über / proc / diskstats) und pro Prozess (über io accounting
/proc/$PID/io
oder taskstats ) überwachen , aber ich kenne keine Möglichkeit, dies pro Datei zu tun.quelle
Kann sein inotify diese lösen lösen wird.
Die inotify-API bietet einen Mechanismus zum Überwachen von Dateisystemereignissen. Inotify kann zum Überwachen einzelner Dateien oder zum Überwachen von Verzeichnissen verwendet werden. Wenn ein Verzeichnis überwacht wird, gibt inotify Ereignisse für das Verzeichnis selbst und für Dateien innerhalb des Verzeichnisses zurück.
Überwachen Sie die Dateisystemaktivität mit inotify
inotify Referenz
quelle
lsof
)Obwohl die Antworten hier viele gute Informationen enthalten, frage ich mich, ob sie tatsächlich zutreffen.
Wenn es sich um Dateien im 10-Gigabyte-Bereich handelt, in die ständig geschrieben wird, und wenn es sich nicht um Protokolldateien oder ähnliches handelt, die ständig angehängt werden (in diesem Fall wird nur die Dateigröße überwacht), handelt es sich höchstwahrscheinlich um mmap-Dateien . Wenn dies der Fall ist, ist die beste Antwort möglicherweise, dass Sie aufhören sollten, nach den meisten Lösungen zu suchen. Das erste, was Sie dann von einer anderen vorgeschlagenen Lösung verlangen sollten, ist "Funktioniert es mit mmap?", Da dies meistens nicht der Fall ist. Sie können das Problem jedoch möglicherweise in die Überwachung eines Blockgeräts umwandeln, anstatt eine Datei zu überwachen.
Wenn ein Programm eine Seite aus einer mmap-Datei anfordert, verweist es lediglich auf einen Speicherort im virtuellen Speicher. Diese Seite befindet sich möglicherweise bereits im Speicher oder nicht. Wenn dies nicht der Fall ist, wird ein Seitenfehler generiert, der das Laden der Seite von der Festplatte auslöst. Dies geschieht jedoch innerhalb des virtuellen Speichersystems, das nicht einfach an einen bestimmten Anwendungsprozess oder eine bestimmte Datei gebunden werden kann. Wenn Ihre App eine mmap-Seite aktualisiert, wird abhängig von den Flags möglicherweise kein sofortiger Schreibvorgang auf die Festplatte ausgelöst, und in einigen Fällen wird möglicherweise gar nicht auf die Festplatte geschrieben (obwohl dies vermutlich nicht die letzten Fälle sind, an denen Sie interessiert sind im).
Das Beste, was ich mir für mmap-Dateien vorstellen kann, ist, wenn es für Sie sinnvoll ist, jede der relevanten Dateien auf einem separaten Gerät zu speichern und mithilfe der Gerätestatistik Ihre Nutzungsdaten zu erfassen. Sie könnten dafür lvm-Partitionen verwenden. Ein Bind-Mount funktioniert jedoch nicht, da kein neues Blockgerät erstellt wird.
Sobald Sie Ihre Dateien auf separaten Blockgeräten haben, können Sie Statistiken aus / sys / block / * oder / proc / diskstats abrufen
Es kann zu störend sein, dies auf einem Produktionsserver einzuführen, aber vielleicht können Sie davon Gebrauch machen.
WENN die Dateien nicht gemappt sind, können Sie hier eine der anderen Lösungen auswählen.
quelle
Ich habe vor kurzem mit collectl herumgebastelt , es sieht toll aus und ist ziemlich unkompliziert zu installieren. Das Interessanteste ist, dass Sie herausfinden können, welcher Prozess für E / A-Engpässe verantwortlich ist. Ich würde Ihnen empfehlen, mit Collectl zu lesen , es könnte nützlich sein.
quelle
Ich würde Ihnen empfehlen, http://dag.wieers.com/home-made/dstat/ zu überprüfen . Mit diesem großartigen Tool können viele Statistiken überprüft werden.
quelle
Ich denke, dass iotop eines der besten Tools unter Linux ist, um Engpässe bei IO zu identifizieren.
quelle
iotop
überwacht nicht pro Datei, es funktioniert pro Prozess