Die CPU blieb einige Stunden bei 99% stecken: Protokolle herausfinden

8

Auszug aus syslog:

CRON[pid]: (user) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -
execdir fuser -s {} 2>/dev/null \; -delete)

Meine CPU steckt seit einigen Stunden bei 99% und ich gehe davon aus, dass dies daran liegt. Würde jemand zufällig wissen, was das ist, wie es angefangen hat und wie man es aufhält?

EDIT: Ich habe es versucht top -n1und ich sehe dies im Gegenzug mehrmals:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
PID user      20   0     0    0    0 Z 99.9  0.0   0:00.00 fuser <defunct>

Diese Zeile wird ungefähr 8 Mal wiederholt.

EDIT2:

uname-a:

user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux`
lsb_release -a:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:    11.10
Codename:   code

EDIT 3:

Nach dem Neustart kehrte das System 99% cpu usagezum gleichen top -n1Ergebnis zurück.

Jack
quelle
3
Dieser Befehl enthält einen Fehler. Die stderr-Ausgabe der Fixiereinheit wird wie vorgesehen an / dev / null gesendet. Aber so ist die stderr Ausgabe von find, was wahrscheinlich nicht war. (Da -execdir den Befehl tatsächlich nicht über die Shell startet, wird 2> / dev / null von der Shell verarbeitet, die direkt von cron aufgerufen wird.) Während dies relevante Symptome verbergen kann, ist die Positionierung von 2> / dev / null nicht die Ursache für Ihre CPU-Auslastung.
James Youngman
3
Das ist sehr seltsam: Ein Zombie-Prozess sollte keine CPU-Zeit benötigen (es muss nicht einmal Code ausgeführt werden). Sie haben entweder einen Fehler in den Tools für die Prozessberichterstattung oder in Ihrem Kernel. Welches Betriebssystem ist das (Version, Kernel usw.)? Gibt es eine Virtualisierung? Was ist die Ausgabe von uname -aund lsb_release -a?
Gilles 'SO - hör auf böse zu sein'
1
Der fuserBefehl ist wahrscheinlich sehr kurzlebig. Es verbringt seine Zeit damit, CPU-Zeit (Systemzeit, nicht Benutzerzeit) zu verbrauchen, um Daten zu generieren / zu verarbeiten, die es (trivial) verbraucht. Jede Instanz von fuserendet wahrscheinlich sehr schnell. Aber es wird wahrscheinlich viele Male ausgeführt, da sich dort vermutlich viele Sitzungsdateien befinden. Die Zahl von 99,9% bedeutet wahrscheinlich nur, dass diese Instanz der fuserCPU intensiv genutzt wurde, bevor sie starb. findwahrscheinlich ist es nicht sehr aggressiv, Kinder zu ernten; Es wird wahrscheinlich waitpidnur dann erneut aufgerufen , wenn ein Verzeichnis verlassen oder fusererneut ausgeführt wird.
James Youngman
uname-a: user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux lsb_release -a: Es sind keine LSB-Module verfügbar. Distributor ID: Ubuntu Beschreibung: Ubuntu 11.10 Release: 11.10 Codename: Code
Jack
Ups, Korrektur: -execdir ... \;Das Warten sollte sofort erfolgen, da der Rückkehrcode als Ergebnis des Prädikats benötigt wird (ich habe dies verwechselt, -execdir ...+was immer wahr zurückgibt, denke ich).
James Youngman

Antworten:

5

Dies ist ein Cron-Job, der alte Sitzungsdateien aus / var / lib / php5 / bereinigt. Wenn es zu 99% hängt, sollten Sie den Zielordner (/ var / lib / php5 /) auf eine übermäßige Anzahl von Dateien oder sogar auf eine Beschädigung des Dateisystems überprüfen.

Der Prozess wird von crontab aus gestartet. Siehe die Crontab-Listen ( hier beschrieben ). Sie können den Prozess beenden und aus crontab entfernen, aber es ist wahrscheinlicher, dass Sie ein zugrunde liegendes Problem haben, z. B. eine übermäßige Anzahl von Dateien, die behoben werden müssen.

Tommy
quelle
1
Wenn am Ende mehrere Bereinigungsprozesse ausgeführt werden, können sie sich gegenseitig stören, indem sie beim Löschen von Dateien Sperren für das Verzeichnis generieren. Versuchen Sie, es vorübergehend von der Crontab zu entfernen, bis die Ladung frei ist. Fügen Sie es dann mit einem längeren Intervall zwischen den Läufen hinzu. Möglicherweise möchten Sie es in ein Skript mit einem Sperrmechanismus verschieben, um sicherzustellen, dass nur eine Instanz ausgeführt wird. Beenden Sie vorerst mehrere Instanzen des Befehls.
BillThor
2

Die Antwort finden Sie hier: http://www.flynsarmy.com/2011/11/fuser-using-100-cpu-in-ubuntu-11-10/

im /etc/cron.d/php5 on Ubuntu 11.10:

Ersetzen
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2&gt;/dev/null \; -delete

Mit
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

Jack
quelle
Dies hat funktioniert, das Problem scheint gelöst zu sein.
Jack