Ich kann meinen Webserver nicht wieder online bringen. Der Server stürzt immer wieder ab und ich bin gezwungen, ihn aus- und wieder einzuschalten, um ihn neu zu starten.
Da ich einen gemeinsam genutzten Host verwende, ist es noch schwieriger, den Schuldigen zu finden.
Wie kann ich herausfinden, welche bestimmte Seite (oder zumindest welcher virtuelle Host) eine übermäßige CPU-Auslastung aufweist?
Ich verwende CentOS mit einem ziemlich standardmäßigen Apache+MySQL+PHP.
Danke!
Antwort1
Die beste Idee ist wahrscheinlich, Apachetop zu installieren.https://code.google.com/p/apachetop/, Sie können auch den Serverstatus von Apache verwenden, aber Apachetop macht es viel lesbarer.
Antwort2
Eine Seite hat wirklich nichts mit diesem Problem zu tun.
Der folgende Befehl sollte eine Liste von PIDs für httpd ausgeben, sortiert nach CPU-Prozentsatz mit dem aktuellen Arbeitsverzeichnis, in dem sich der httpd-Worker befindet.
Dies setzt natürlich voraus, dass httpd der Übeltäter ist.
IFS=" "; ps -A ho pcpu,comm,pid | grep httpd | sort -k1n \
while read pcpu comm pid; do \
echo -n "${pcpu"}: "l pwdx "${pid}";
done
Ich erhalte eine Ausgabe ähnlich der folgenden:
0.0: 1850: /
0.0: 1852: /
0.0: 1854: /
0.0: 1853: /
0.0: 1855: /
0.0: 1856: /
0.0: 1857: /
0.0: 1858: /
Dies funktioniert, weil Apache Verzeichnisse in das Dokumentstammverzeichnis des virtuellen Hosts ändert, bevor er innerhalb des virtuellen Hosts arbeitet. Der virtuelle Host, der dieses Dokumentstammverzeichnis hat, ist also der Übeltäter.
Wenn Sie über mehr als einen virtuellen Host verfügen, der dasselbe Dokumentstammverzeichnis verwendet, müssen Sie beide virtuellen Hosts untersuchen, um festzustellen, was sie vorhaben.
Da ich keine Apache-Worker habe, die CPU-Zeit beanspruchen, sind sie alle 0,0 und daher findet keine Sortierung statt.
Wenn das Problem tatsächlich eine SQL-Abfrage ist, erwarten Sie nicht, dass hier etwas angezeigt wird.