Forum Linux.général process apache gourmand

Posté par  .
Étiquettes : aucune
0
22
avr.
2008

bonjours a tous,

en faisant un ps -aux sur mon serveur web (c'est une redhat el5 avec apache 2 et php 5.2.5) je m'appercois que j'ai 4 process httpd qui apparement utilisent 14%, 15%, 11%, 10% du cpu, en plus des autres. comment puis je m'y prendre pour savoir qu'est ce qui fait que ces process utilisent autant le cpu? j'ai 4 sites web qui sont sur ce serveur.
  • # mod_status

    Posté par  . Évalué à 2.

    Tu peux faire deux choses:

    Activer mod_status et aller sur la page dynamique générée par le module pour voir quels sont les requêtes en cours.

    Configurer les logs pour tracer le temps de service de chaque requête, et ensuite faire une petite analyse pour déterminé quels sont les pages qui demandent beaucoup de temps.
    • [^] # Re: mod_status

      Posté par  . Évalué à 1.

      selon toi ça pourait venir d'une requete qui prend trop de temps ?

      j'ai activé le mod_status.c'est plutot pas mal. par contre pour tracer le temps de service des requetes j'ai un doute. je dois ajouter %T dans LogFormat ou %t ?
      selon la doc %T me semble aproprié mais j'ai un doute.
      • [^] # Re: mod_status

        Posté par  . Évalué à 2.

        Apache est plutôt d'excellente qualité, je n'ai jamais vu ce genre de problème.

        Par contre, les boulets applicatifs, on en trouve des milliers partout sur le net: PHP qui n'a pas de contexte d'application ou global, application Java qui consomme des tonnes de mémoire ou qui ont des fuites mémoire, scripts PHP mal fichus...

        Donc a vu de nez avec les faibles informations que tu nous donnes, je dirais: application PHP mal fichue qui consomme beaucoup de CPU.

        Repérer les pages qui demandent beaucoup de temps à être servies devraient permettre de retrouver le script fautif.
      • [^] # Re: mod_status

        Posté par  . Évalué à 2.

        Je viens de faire un tour dans la doc pour le boulot, et j'ai pensé à toi.

        http://httpd.apache.org/docs/2.0/mod/mod_log_config.html

        %D: The time taken to serve the request, in microseconds.
        %T: The time taken to serve the request, in seconds.

        Donc je pense que c'est %D et non %T.

        %t n'a rien à voir, ça trace la date à laquelle a eu lieu la requête.
    • [^] # Re: mod_status

      Posté par  . Évalué à 1.

      hello,

      alors pour en revenir a mon prob, c'etait plutot pas mal ton idée de loguer le temps de service des requetes. en metant mes logs dans un fichier excel et en reorganisant la colone correspondant au temps de service des requetes je me suis appercu que certainne requetes prenaient plus de 600 secs (oui oui 600).
      en copinant ces requetes plusieur fois dans un navigateur, j'arrive a reproduire mon probleme. maintenant reste plus qu'a voir avec les dev ce que fout cette p... de requette. je pense qu'il y a 90% de chance que le probleme vienne de là.
      en tout cas merci pour votre aide :)
  • # apache + mod_php = interpreteur

    Posté par  (site web personnel) . Évalué à 2.

    apache + mod_php c'est juste un interpreteur qui reste persistant en mémoire.

    Donc comme pour les scripts python, perl, shell, ... , ton code PHP peut etre bien écrit et optimisé pour la tenue en charge.

    Sauf que comme pour la trop grande majorité des scripts python, perl, shell, ton code PHP que tu fais tourné est mal codé avec des algorithmes consommateurs de CPU et pleins de trucs qui ne servent à rien.

    Donc si c'est toi qui a codé ce qui tourne, je te conseille vivement de te pencher sur les bouquins d'algorithmiques théoriques, sur les strategies d'optimisation & co ...

    Si tu es juste l'admin ou que tu as choisi le soft qui tourne, trouves-en un bien foutu qui fasse la même chose, ca doit exister et il sera dur à trouver.

    donc mod_status t'aidera, et si tu as le loisir de faire le goret "ab" ( apache benchmark ) est un bon stress test pour savoir ou cela merde :)
    • [^] # Re: apache + mod_php = interpreteur

      Posté par  . Évalué à 1.

      alors en fait non ce n'est pas moi qui ai codé les sites qui tournent dessus :)
      je vais essayer apache benchmark.pour le moment y a que 4 sites sur ce serveur.mais il risque d'y en avoir plus a l'avenir (il risque pas, c'est certain).
      la difficultée c'est de savoir deja quel est le site qui fout le dawa et ensuite de trouver les ou la requette.
      • [^] # Re: apache + mod_php = interpreteur

        Posté par  (site web personnel) . Évalué à 2.

        si tu en es là, il te faut identifier le site qui prend le plus de trafic.

        as tu un awstats ou un webalizer ?
        as tu apachetop ?

        Maintenant, il ne faut pas croire que "projet réputé avec une super communauté" est un gage sur la qualité et la performance du code.
  • # C'est pas grave...

    Posté par  . Évalué à 1.

    Chez moi, il n'est pas rare qu'un seul processus Apache consomme 100% du CPU. Mais ça ne dure généralement pas longtemps (<1 seconde).

    Apache reçoit une requête, il veut la traiter le plus vite possible. Si ton serveur ne fait d'autre à ce moment, il laissera Apache faire ce qu'il veut.

    Mais bon, si un seul processus Apache (ou plusieurs) consomme du CPU pendant plusieurs secondes sur une page simple : oui, il y a un problème.
    • [^] # Re: C'est pas grave...

      Posté par  . Évalué à 1.

      alors en fait ce qu'il se passe c'est qu'il y a 3 process httpd qui tournent dont un qui prend entre 45% et 50% du cpu pendant une 10ene de secondes.ça s'arette mais il repart aussitot. parfois il peux y avoir d'autre process httpd qui se joingnent a la fete genre 5 ou 6 mais tres peux consomateurs de ressources (enfin c'est souvant qu'il y en a 2 ou 3 a 10% ou 15% d'usage cpu).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.