2010-12-08 6 views
0

Est-il possible avec PHP (5) ou d'autres outils Linux sur un serveur web apache debian d'obtenir une seule requête http? pour des raisons de performance je voudrais les comparer avec la "version" en cache de mon application de gâteau.Nombre de demandes de fichiers déclenchées

non mis en cache pouvant être supérieur à 100 dans certaines vues. mis en cache seulement jusqu'à 10 (heureusement).

afaik il y a 3 fonctions principales de fichier: file_get_contents(), fichier() et le fopen() manuel etc

mais je ne peux pas les remplacer si je ne peux pas placer une fonction logRequest() en eux. y a-t-il un autre moyen? attacher des rappels à des fonctions? intercepter les demandes de fichiers?

+0

Si vous ne souhaitez que la façon dont la version en cache effectue par rapport à la version non-cache, il suffit de lancer un profileur une fois avec le cache activé et puis de nouveau avec le cache désactivé. Cela devrait vous dire la différence. Peut utiliser Xdebug pour cela. Si vous voulez faire des tests de chargement, utilisez la commande 'ab'. – Gordon

+0

bien, dans ce cas particulier plus la quantité de demandes de fichiers dont le script PHP a besoin pour accomplir le résultat final. non seulement pour la comparaison avec la version mise en cache, mais aussi pour le but de suivre les vues avec le plus de demandes de fichiers et d'essayer de réduire le nombre. – mark

Répondre

2

Cette suggestion ne semble pas intuitif, mais vous pouvez prendre regarder xdebug - function trace

Une fois que vous avez xdebug installé et activé, vous pouvez en utilisant toutes sortes de configuration pour enregistrer le profilage dans un fichier disque et vous pouvez le récupérer plus tard. Tels que le profilage des résultats pour différentes URL enregistrer dans un fichier de disque différent.

Pour système de fichiers de surveillance des fonctions connexes, vous pouvez faire une analyse syntaxique du fichier texte (résultats du profilage) et faire un nombre de fonctions matchable (programmable ou manuellement)

+0

thx beaucoup - en raison de xdebug j'ai: 272 file_exists, 100 exigent, 20 comprennent, 32 fopen pour une seule demande de mon application cakephp (page d'accueil) – mark

0

Question intéressante. Je commencerais par le stream_wrapper ... essayez de les remplacer par des classes personnalisées.

+0

classe intéressante. Je suppose que personne n'a essayé cela avant ... :) au moins ma recherche n'a pas donné de résultats en essayant de compter les demandes. – mark

0

La façon dont je le ferais serait de créer une fonction personnalisée qui entoure celle dont vous avez besoin.

function custom_file_get_contents($filename) { 
    $GLOBALS['file_get_contents_count']++; 
    return file_get_contents($filename); 
} 

Et il suffit de remplacer tous vos appels à file_get_contents avec custom_file_get_contents. Ce n'est qu'un exemple rudimentaire, mais vous avez l'idée.

Side note, si vous voulez compter combien de fichiers votre script a inclus (ou nécessaire), voir get_included_files()

+0

sure - mais cela nécessiterait que mon noyau CAKE soit modifié. et c'est ce que vous voulez éviter. l'utilisation d'un framework avec un core modifié rendrait les core-updates assez difficiles. – mark

1

Vous pouvez utiliser Xdebug pour enregistrer toutes les appels de fonction

Les soi-disant " traces de fonction "peut être utile lorsque vous êtes nouveau dans une application ou lorsque vous essayez de comprendre ce qui se passe exactement lorsque votre application est en cours d'exécution. Les traces de fonction peuvent également afficher les valeurs des variables passées aux fonctions et aux méthodes, ainsi que les valeurs renvoyées. Dans les traces par défaut, ces deux éléments ne sont pas disponibles.

0

Il y a un extention pecl appelé BAD (Advanced PHP Débogueur) qui a des fonctions de remorquage qui seraient très utiles pour un cse comme ceci - override_function() et rename_function(). Vous pourriez faire quelque chose comme ceci:

rename_function('file_get_contents', 'file_get_contents_orig'); 

function file_get_contents($filename) { 
    logRequest(); 
    return file_get_contents_orig($filename); 
} 

Il semble que ADB soit assez facile à installer.

Voir http://www.php.net/manual/en/book.apd.php

Questions connexes