Apache verwendet 100% CPU. Kann mir der Befehl "ps" sagen, was er tut?

8

Ich habe einen SLES 10 Linux-Server, und manchmal wird er von Apache auf 100% CPU ausgereizt.

Mit ps axkann ich sehen, dass Apache ~ 50 Apache-Prozesse hervorgebracht hat.

Kann psmir zB der Befehl sagen, was jeder dieser Apache-Prozesse tut?

Oder vielleicht eine andere Methode, damit ich sehen kann, welche Webseiten das Problem auslösen?

Sandra
quelle

Antworten:

14

Meine Datei /etc/httpd/conf/httpd.conf enthält diesen Abschnitt:

# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .example.com
    Allow from 127. 192.168.1.
</Location>

Wenn ich also zu http://192.168.1.1/server-status gehe , erhalte ich eine Seite mit folgenden Informationen:

  1. Serverversion
  2. httpd Verfügbarkeit
  3. aktuelle CPU-Auslastung
  4. der bearbeiteten Anfragen und der Anzahl der nicht beschäftigten Mitarbeiter

  5. ein Raster dessen, was jeder Prozess tut
  6. aktuelle Anfragen

    Apache Server Status für 192.168.3.1

    Serverversion: Apache / 2.2.3 (Red Hat)
    Server Erstellt: 14. Juli 2009 06:04:04

    Aktuelle Zeit: Samstag, 17. Juli 2010, 10:20:31 Uhr CDT-
    Neustartzeit: Samstag, 17. Juli 2010, 10:13:12 Uhr CDT
    Parent Server Generation: 0
    Server-Betriebszeit: 7 Minuten 19 Sekunden Gesamtzugriff
    : 51 - Gesamt
    Datenverkehr : 156 kB CPU-Auslastung: u0 s0 cu0 cs0
    .116 Anforderungen / Sek. - 363 B / Sekunde - 3132 B / Anforderung
    1 Anforderungen werden derzeit verarbeitet, 7 inaktive Mitarbeiter

    __W _____................................................. .......
    ........................................... .....................
    ............................. ...................................
    ............... .................................................

    Anzeigetaste:
    "_" Warten auf Verbindung, "S" Starten, "R" Leseanforderung,
    "W" Antwort senden, "K" Keepalive (Lesen), "D" DNS-Suche,
    "C" Schließen der Verbindung, "L. "Protokollieren", G "Anmutig beenden,
    " Ich "Leerlaufsäuberung des Arbeiters". Slot ohne aktuellen Prozess öffnen

    Srv PID Acc M CPU SS-Anforderung Conn Child Slot Client VHost-Anforderung
    0-0 20715 0/2/2 _ 0,00 418 0 0,0 0,01 0,01 192,168,3,97 dit GET / Server-Status HTTP / 1,1
    1-0 20716 0/49/49 _ 0,00 128 0 0,0 0,15 0,15 192,168,3,97 dit GET / Serverstatus HTTP / 1,1
    2-0 20717 0/0/0 W 0,00 0 520222374 0,0 0,00 0,00 192,168,3,97 dit GET / Serverstatus HTTP / 1,1

Kevin M.
quelle
Möglicherweise müssen Sie festlegen ExtendedStatus ON, um jede Anfrage zu sehen
TonyUser
3

stracekann Ihnen sagen, was ein bestimmter Prozess auf der Ebene von Systemaufrufen tut, aber es gibt Ihnen keine "50-Fuß-Ansicht" darüber, was passiert. Sie müssen die verwendeten Systemaufrufe zusammensetzen, um dies herauszufinden.

Ignacio Vazquez-Abrams
quelle
2

Wenn Sie eine Website mit einem Datenbank-Backend haben, können Sie im DBMS nachsehen, welche Befehle derzeit ausgeführt werden. Vielleicht könnte dies Ihnen helfen, einzugrenzen, wo in Ihrem Code der Website die Last erzeugt wird.

Andernfalls können Sie die Protokollstufe des httpd-Dämons erhöhen . Dann haben Sie weitere Informationen in den Protokollen.

Raffael Luthiger
quelle
1

Es gibt auch ltrace, das wie strace funktioniert, aber mit Bibliotheksaufrufen.


quelle
0

Sie finden Top vielleicht informativer als ps.

bmargulies
quelle