Gibt es eine Möglichkeit, die Ursache (oder Zieldatei) von Festplattenschreibvorgängen in Linux (RHEL6.1) zu dokumentieren?

Gibt es eine Möglichkeit, die Ursache (oder Zieldatei) von Festplattenschreibvorgängen in Linux (RHEL6.1) zu dokumentieren?

Ich habe eine virtuelle Maschine mit einer PHP-basierten Anwendung (in Apache). Bei Betrachtung der Festplattenaktivität werden bei laufendem Apache konstant 170 kbps geschrieben.

Wenn wir eine Last anwenden, ist die Leistung des Servers CPU-belastet, aber das scheint direkt mit 20- bis 30-fachen Anstiegen der Schreib-E/A-Raten bei der Festplatte zusammenzuhängen. Das CPU-Auslastungsdiagramm spiegelt das Diagramm der Schreibzugriffe auf die Festplatte wider.

Irgendwelche Ideen?

Antwort1

Zwei Empfehlungen:

iotopist ein praktisches Programm, das Ihnen die E/A-Nutzung in Echtzeit in einem Format wie dem topBefehl anzeigt. Dies sollte Ihnen dabei helfen, das Skript/Binärprogramm zu identifizieren, das die gesamte E/A ausführt. Ich denke, dies ist möglicherweise bereits auf neueren Kerneln installiert, aber yum stellt es möglicherweise auf RHEL bereit, wenn Sie es nicht sehen.

lsofist auch bei der E/A-Fehlerbehebung hilfreich; es listet alle geöffneten Dateien auf.

AKTUALISIEREN

Wenn eine „konstante“ Festplattenaktivität vorliegt, iotopsollten Sie erfahren, welche Prozesse die Schuldigen sind. In Bezug auf den E/A-Transaktionsverlauf: Ich glaube nicht, dass der E/A-Verlauf in den meisten Linux-Distributionen irgendwo protokolliert wird, aber Sie können einen Cron-Job hinzufügen.

Öffnen Sie als Root die Crontab crontab -eund fügen Sie diese beiden Zeilen hinzu:

* * * * * /bin/date >> /var/log/iotop; /usr/local/bin/iotop -bot --iter=3 -q >> /var/log/iotop
* * * * * /bin/date >> /var/log/lsof; /usr/bin/lsof -b -w >> /var/log/lsof

Dadurch wird jede Minute ein Speicherauszug erstellt iotopund lsofin ein Protokoll ausgegeben. Fügen Sie für jeden ein Logrotate-Skript hinzu, damit die Dateien nicht den gesamten Speicherplatz beanspruchen, z. B.:

someuser@myhost:~> cat /etc/logrotate.d/lsof
/var/log/lsof {
  rotate 3
  weekly
  compress
  missingok
  notifempty
}

Antwort2

Es scheint, dass eine unabhängige Hintergrundaufgabe den Inhalt des Verzeichnisses /tmp löschte, in das PHP vorkompiliert wurde. Infolgedessen wurde der PHP-Vorkompilierungsprozess erneut gestartet, was zu ständiger Festplattenaktivität führte.

verwandte Informationen