Meine Situation ist, dass von Zeit zu Zeit ein bestimmter Prozess (in diesem Fall Thunderbird) etwa eine Minute lang nicht auf Benutzereingaben reagiert. Ich iotop
habe in dieser Zeit herausgefunden, dass es ziemlich viel auf die Festplatte schreibt, und jetzt möchte ich herausfinden, in welche Datei es schreibt, aber leider iotop
gibt es nur Statistiken pro Prozess und nicht pro geöffneter Datei (-descriptor).
Ich weiß, dass ich lsof
damit herausfinden kann, welche Dateien der Prozess gerade geöffnet hat, aber Thunderbird hat natürlich viele davon geöffnet, daher ist dies nicht so hilfreich. iostat
Zeigt nur Statistiken pro Gerät an.
Das Problem tritt nur zufällig auf und es kann einige Zeit dauern, bis es auftritt. Ich hoffe, ich muss Thunderbird nicht belasten und durch lange Protokolle waten, um herauszufinden, welche Datei die meisten Schreibvorgänge aufweist.
quelle
Antworten:
Wenn Sie dem Prozess nur dann eine Strace hinzufügen, wenn er hängen bleibt (Sie können die PID abrufen und den Befehl im Voraus in einem Ersatzterminal in die Warteschlange stellen), wird der Dateideskriptor des blockierenden Schreibvorgangs angezeigt.
Triviales Beispiel:
quelle
lsof -p $PID
, um zu wissen, wo der Dateideskriptor zeigtls -l /proc/pid/fd
unter LinuxWenn Sie Root-Zugriff haben, denke ich, dass das beste Tool das Audit-Subsystem wäre . Es gibt nicht viel Literatur darüber (aber mehr als über loggedfs); Sie können beginnen mit diesem Tutorial oder ein paar Beispiele oder einfach nur mit der
auditctl
man - Seite . Hier sollte es ausreichen, um sicherzustellen, dass der Dämon gestartet und dannauditctl
als root ausgeführt wird:Dies schreibt
/var/log/audit/audit.log
jedes Mal in Protokolle, wenn der Prozess mit pid 1234 irgendwo darunter schreibt/home/philipp
. Der Overhead ist ziemlich klein, viel kleiner alsstrace
.quelle
-S read -S write
(ungetestet).