2010-10-07 2 views
11

Si une page prend quelques secondes à traiter, j'aimerais qu'Apache enregistre cette URL quelque part. Est-ce possible? J'ai beaucoup de sites, donc je cherchais un moyen automatique de le faire par opposition au code propriétaire pour chaque site.Existe-t-il un moyen d'avoir des requêtes lentes Apache?

Répondre

21

Jetez un oeil à http://httpd.apache.org/docs/2.2/mod/mod_log_config.html. Vous pouvez configurer un journal personnalisé qui inclut le temps nécessaire pour répondre à la requête.

Par exemple:

LogFormat "%h %l %u %t \"%r\" %>s %b %D" common-time 

ajouterions le temps en microsecondes il a fallu pour servir la demande que le dernier champ de votre fichier journal.

Vous ajoutez cette ligne à votre httpd.conf, puis dans chaque virtualhost où vous voulez l'utiliser, ajoutez cette ligne:

CustomLog logs/access_log_time common-time 

Vous pouvez aussi créer une nouvelle LogFormat qui ne contient que exactement ce que vous veulent, peut-être comme ceci:

LogFormat "\"%r\" %D" measure-time 

Dans votre virtualhost, vous pouvez avoir plusieurs journaux, vous pouvez donc avoir:

CustomLog logs/access_log common 
CustomLog logs/access_log_time measure-time 

Tout cela dit, il ya un grande mise en garde. Cela ne mesurera que le temps nécessaire au serveur pour servir la page. Il ne pas inclure le temps qu'il faut pour exécuter n'importe quel javascript dans le navigateur. Si vous devez mesurer le temps d'exécution de javascript, vous devez utiliser un outil tel que firebug.

Une fois que vous avez le journal, vous pouvez utiliser quelque chose comme apachelog pour analyser le fichier journal pour obtenir uniquement les requêtes qui ont pris plus de temps que le seuil que vous voulez utiliser.

Je ne sais pas s'il est possible de ne consigner que les requêtes longues et les byps dans l'étape d'analyse. C'est peut-être le cas, mais j'ai l'impression que cela demanderait beaucoup de travail.

+0

Y a-t-il des conséquences à l'utilisation de cette fonction dans le fichier journal? Par exemple, y a-t-il un surcoût supplémentaire dans le calcul du temps de réponse avant de cracher une ligne de journal? – laughingbovine

+1

Il peut y avoir des frais généraux, mais je pense que vous auriez besoin d'un trafic assez important avant d'avoir un impact notable sur les performances de votre site/serveur. Je suggère d'utiliser [ab] (http://httpd.apache.org/docs/2.2/programs/ab.html) pour tester avant et après l'implémentation de ce changement afin que vous ayez une idée de la façon dont il fonctionnera pour vous. – bradym

+5

y a-t-il un moyen de dire, ne consigner que si le temps de mesure est> 1 seconde? –

Questions connexes