2010-12-06 4 views
11

Je m'attaque à l'idée de mettre en œuvre quelque chose qui profile le code sur le serveur de production et je souhaite des conseils sur les meilleures pratiques. Évidemment, c'est une mauvaise idée de profiler TOUTES les demandes à cause de l'overhead ajouté ainsi je regardais dans quelques techniques qui invoqueront aléatoirement le profileur par demande. Quelque chose comme 1 profil pour chaque 10 000 demandes.Code de profilage en production

Je sais qu'il existe un moyen d'accomplir une telle tâche avec Facebook XHProf Profiler mais espérait une solution similaire en utilisant xdebug.

Mes questions sont (en supposant xdebug est le profileur):

  1. Est-ce ce genre de fonction même souhaitable? Je voudrais obtenir des données du monde réel à partir de l'environnement de production, mais pas si cela signifie détruire l'expérience de l'utilisateur en raison des frais généraux.
  2. L'installation de xdebug en production ouvre-t-elle le serveur aux attaquants/exploiteurs de quelque façon que ce soit (en supposant que le débogueur n'est pas activé)? Y a-t-il une configuration de plaque de chaudière pour ce type d'installation?
  3. Quelle est la meilleure façon de déclencher le profileur pour une taille d'échantillon appropriée?

Tout autre aperçu de la question serait très apprécié.

Répondre

9

Ne pas réinventer la roue. XHProf Profiler est certainement le meilleur outil pour le travail lorsqu'il s'agit de profiler du code dans un environnement de production.

Vos options pour permettre le profilage au sein xdebug sont limités à avoir soit le profilage toujours via un fichier php.ini ou d'un fichier .htaccess via xdebug.profiler_enable = 1 ou tourner de manière sélective sur le profilage via xdebug.profiler_enable_trigger = 1. Dans ce dernier cas, vous devez disposer d'un ensemble de paramètres XDEBUG_PROFILE GET ou POST ou envoyer un cookie portant le nom XDEBUG_PROFILE. Cela signifie que si une personne malveillante le souhaite, elle peut ralentir votre serveur en ajoutant simplement ce paramètre GET à un ensemble de requêtes. La seule option que je pourrais voir qui profilerait un échantillon relativement aléatoire de demandes est d'avoir un script cron placer un fichier .htaccess dans le répertoire approprié, périodiquement, puis le retirer du répertoire. Pourtant, c'est moins que souhaitable.

Si vous décidez d'aller avec XHProf, jetez un oeil à XHGUI.

http://phpadvent.org/2010/profiling-with-xhgui-by-paul-reinheimer

+0

Merci pour la suggestion John. Je vais lire plus sur xhprof et lui donner plus de considération. –