Comment faire un strace sur tous les processus Apache ?
Aujourd'hui, nous allons voir une petite commande très utile pour débugger un serveur web. Celle-ci permet de faire un strace sur tous les processus Apache qui tournent sur une machine, de manière automatique. Avec cette technique, vous pourrez facilement identifier les goulets d'étranglement avant la mise en production d'un service, ou mettre la main sur une procédure qui bloque.
Voici la commande en question, pour une distribution à base de RPM :
ps awux | grep sbin/httpd | awk '{print"-p " $2}' | xargs strace -f
Ou celle-ci, pour une distribution à base de Debian, car le nom du binaire est "apache" au lieu de "httpd" dans la plupart des cas :
ps awux | grep sbin/apache | awk '{print"-p " $2}' | xargs strace -f
Il ne vous reste plus qu'à analyser le résultat avec vos yeux d'administrateur système avertis.
9 Commentaires pour "Comment faire un strace sur tous les processus Apache ?"
Flux des commentaires de cet article Ajouter un commentaireTrès chouette ce tableau d'art moderne
Hello,
C'est bien pour un serveur qui fait quelques requêtes, mais pour une machine qui fait plusieurs milliers de hits à la secondes...
Hello,
La commande est vraiment très bien et permet de faire un rapide débug.
Si un machine fais beaucoup de HIT, tu ne devrais pas avoir qu'un serveur je pense ^_^
@Skydiverss, tu sort le serveur de la ferme de loadbalancing et tu fais tes essais tout seule sur le serveur
Djerfy
@Mr Xhark :
@Skydiverss : yep, c'est justement la raison pour laquelle il faut plutôt l'utiliser avant la mise en production d'un service.
@Djerfy : +1
En fait il y a une astuce, initier une connection en localhost avec telnet, identifier le process http associé et lancer le strace sur ce process
Dans ma boite on a plusieurs milliers de serveurs web, si a chaque fois on devait en sortir un pour faire du debug...
@skydiverss : pas mal comme technique aussi. Je n'y avais pas pensé.
se connecter en telnet sur apache2? lol comment on peut faire sa/quel port? juste par curiosité.
@sl33k : regardes ici.
Mhmm, un truc m'echappe... A quoi sert de "chercher" le PID d'apache pour ensuite en lancer un nouveau ?
pour s'attacher a un processus existant, c'est "strace -o pid xxx" ! -f LANCE le processus, attends son PID et s'y attache. Sous Linux un "ps axf" vous donnera la liste des processus et dependances parents/enfants, il suffira donc de s'attacher a celui qui nous interesse (en fonction evidement du type de MPM Apache utilise pour peu qu'on reste uniquement sur Apache).
Enfin, pour trouver le pid d'un processus ya plus simple que l'artillerie lourde deployee dans l'article... "pidof" est votre ami.