Apache utilise 100% de CPU. La commande «ps» peut-elle me dire ce qu'elle fait?

8

J'ai un serveur SLES 10 Linux, et parfois il est maximisé par Apache à 100% CPU.

Avec ps axje peux voir, qu'Apache a engendré environ 50 processus Apache.

Par exemple, la pscommande peut-elle me dire ce que font chacun de ces processus Apache?

Ou peut-être une autre méthode pour que je puisse voir quelles pages Web qui déclenchent le problème?

Sandra
la source

Réponses:

14

Mon fichier /etc/httpd/conf/httpd.conf a cette section:

# 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>

Ainsi, si je vais sur http://192.168.1.1/server-status , j'obtiens une page qui me dit:

  1. version serveur
  2. httpd uptime
  3. utilisation actuelle du processeur
  4. des demandes en cours de traitement et du nombre de travailleurs inactifs

  5. une grille de ce que fait chaque processus
  6. demandes récentes

    État du serveur Apache pour 192.168.3.1

    Version du serveur: Apache / 2.2.3 (Red Hat) Version du
    serveur: 14 juillet 2009 06:04:04

    Heure actuelle: samedi 17 juil. 2010 10:20:31
    Heure de redémarrage CDT : samedi 17 juil. 2010 10:13:12
    Génération du serveur parent CDT : 0 Disponibilité du
    serveur: 7 minutes 19 secondes Accès
    total: 51 - Total Trafic: 156 ko
    Utilisation du processeur: u0 s0 cu0 cs0
    .116 requêtes / sec - 363 B / seconde - 3132 B / request
    1 requêtes en cours de traitement, 7 travailleurs inactifs

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

    Clé du tableau de bord:
    "_" En attente de connexion, "S" Démarrage, "R" Demande de lecture,
    "W" Envoi de réponse, "K" Keepalive (lecture), "D" Recherche DNS,
    "C" Fermeture de la connexion, "L "Logging", "G" Finissant gracieusement,
    "I" Nettoyage inactif du travailleur "." Emplacement ouvert sans processus en cours

    Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request
    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 / état du serveur 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 / état du serveur HTTP / 1.1

Kevin M
la source
Vous devrez peut-être définir ExtendedStatus ONpour voir chaque demande
TonyUser
3

stracepeut vous dire ce que fait un processus spécifique au niveau des appels système, mais il ne vous donnera pas une "vue à 50 pieds" de ce qui se passe. Vous devrez reconstituer les appels système qu'il utilise afin de comprendre cela.

Ignacio Vazquez-Abrams
la source
2

Si vous avez un site Web avec un backend de base de données, vous pouvez regarder dans le SGBD les commandes en cours d'exécution. Cela pourrait peut-être vous aider à préciser où dans votre code du site Web la charge est générée.

Sinon, vous pouvez augmenter le niveau de journalisation du démon httpd. Ensuite, vous avez plus d'informations dans les journaux.

Raffael Luthiger
la source
1

Il existe également ltrace, qui fonctionne comme strace mais avec des appels de bibliothèque.


la source
0

Vous pourriez trouver top plus informatif que ps.

bmargulies
la source