l'activation de Xdebug remote debug rend le serveur apache très lent
si j'active xdebug en réglant xdebug.remote_enable=1
, le serveur apache devient très lent; une fois que je change le réglage en 0
, c'est normal.
j'ai trouvé une même question ici: XDebug vraiment lent , mais la réponse n'est pas utile. Je n'ai pas activé le profilage:
xdebug.profiler_enable=0
xdebug.auto_trace = 0
xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c
j'ai vérifié qu'il n'y avait rien dans le dossier /tmp/xdebug.
quand xdebug remote debug est activé et que j'active debug écouter dans PHPStorm, cela prend un court moment pour s'arrêter au point de rupture, mais pas aussi lentement que désactiver l'écoute de débogage de phpstorm.
mon environnement est: php + apache + xdebug sur centos VM local, My mysql db et PHPStorm sont sur Windows desktop pour le développement. MySQL n'est pas lent.
Merci pour votre aide.
7 réponses
dans mon cas, cela a été causé par avoir
xdebug.remote_autostart = 1
dans de php.ini . Cela provoque xdebug à essayer de se connecter au débogueur à distance sur chaque requête . J'ai eu quelques styles PHP manipulés, auto_preppend_file et d'autres fichiers PHP dans la requête et pour chacun d'eux il a attendu environ 2secs, ce qui a ajouté à sth. comme les 15 secondes environ. Réglage
xdebug.remote_autostart = 0
résolu le problème complètement. xdebug ne connecte que lorsque le cookie de débogage est présent . S'il vous plaît noter vous devez supprimer le cookie de débogage/param si vous n'êtes pas dans la session de débogage pour que ce correctif fonctionne .
a également connu de faibles performances avec XDebug (Chargement Captcha en 6 secondes au lieu de millisecondes) Les remarques sur cette page m'ont permis d'identifier la cause.
éteint le profileur et le temps de chargement a été divisé par 3. Toujours lent, mais déjà meilleur.
xdebug.profiler_enable = 0
comme autre référence... dans le cas où quelqu'un a le même problème ... (60 sec. temps mort)
premier double check xdebug.remote_autostart
est désactivé pour éviter la connexion automatique.
Comme le font remarquer @LazyOne
et @Tomáš Fejfar
.
xdebug.remote_autostart
Type : booléen, valeur par défaut: 0
Normalement, vous devez utiliser une variable HTTP GET/POST spécifique pour démarrer le débogage à distance ( voir débogage à distance ). lorsque ce paramètre est défini à 1, Xdebug tentera toujours de démarrer une session de débogage à distance et d'essayer de se connecter à un client , même si la variable GET/POST/COOKIE n'était pas présente.
avec ça, je récupère ma vitesse normale lorsque le débogage témoin n'était pas présent...
Mais!... Je reçois toujours réponse très lente (60 sec. timeout) du serveur lorsque le cookie a été activé manuellement .
donc, après avoir lu la Documentation Xdebug et vérifié ma configuration,
Je découvre que j'avais activé xdebug.remote_connect_back
xdebug.remote_connect_back
Tapez : boolean-valeur par Défaut: 0, Introduit dans Xdebug > 2.1
Si l'option est activée, l'extension xdebug.le paramètre remote_host est ignoré et Xdebug va essayer de se connecter au client qui a fait la requête HTTP . Il vérifie la variable $ _SERVER ['REMOTE_ADDR'] pour trouver l'adresse IP à utiliser. Veuillez noter qu'il n'y a pas de filtre disponible, et quiconque peut se connecter au serveur web pourra alors démarrer une session de débogage, même si son adresse ne correspond pas à xdebug.remote_host.
Donc tous les appels vers le serveur était d'essayer d'être débogué, rendant le serveur très lent et aussi l'insécurité.
désactiver cette option et et vérifié que j'avais bien défini xdebug.remote_host
pointant vers ma machine, j'ai eu une réponse acceptable ~1sec. et seulement lorsque le cookie est activé .
donc en bref, mon fichier de configuration se termine comme ceci:
zend_extension = "/absolute/path/to/your/xdebug-extension.so"
xdebug.remote_enable = 1
xdebug.remote_autostart = 0
xdebug.remote_connect_back = 0
xdebug.remote_host = "192.168.1.2"
xdebug.remote_port = 9000
xdebug.remote_handler = "dbgp"
xdebug.remote_mode = req
xdebug.remote_log = "/tmp/xdebug.log"
Note: j'ai fait ces changements dans etc/php5/conf.d/xdebug.ini
fichier et non dans php.ini
Edit:
Comme @ Riimu & @ jdunk point it out merci à la fois , vous pouvez vouloir définir aussi:
* voir les commentaires pour plus de détails
xdebug.remote_cookie_expire_time = 0
// or
xdebug.remote_cookie_expire_time = -9999
J'utilise PHPStorm 7.1 et le serveur Apache installé par XAMPP 1.8.2, tout cela sous Windows 8.1. J'ai fait l'expérience d'une interopérabilité lente entre Chrome et PHPStorm en mode debug lorsque j'ai réglé les points de rupture.
vitesse a été considérablement améliorée par l'installation de la dernière version de la dll XDebug (utilisez le Xdebug wizard pour déterminer quelle version télécharger), copier la dll dans votre dir php/exter et changer le php.ainsi, la nouvelle dll XDebug sera chargé. Arrêtez Apache et voyez la différence.
je pourrais vérifier qu'un gain de performance similaire s'est produit lors du débogage D'une webapp avec Eclipse (Juno avec PDT) en utilisant le navigateur Web interne Eclipse.
il est probable qu'il y ait des temps morts de réseautage ici. La meilleure façon de découvrir ce qui ne va pas est d'essayer de déboguer un script en ligne de commande. Si ça a le même problème, puis utiliser strace
pour voir ce qu'il est suspendu sur:
export XDEBUG_CONFIG="idekey=yourname"
strace -tt -o /tmp/strace.log php full/path/to/script.php
regardez ensuite /tmp/strace.log
et voyez où le ralentissement se produit.
dans mon cas, une faible performance a été causée par le fait que plus de 200 points de rupture ont été définis dans PHPStorm qui ont été évalués à chaque demande par xdebug.
effaçant ces points de rupture dans PHPStorm augmenté la perfomance de 60 sec à 6 sec par demande.
aussi, si vous voulez quitter xdebug.remote_autostart = 1 activé tout le temps, dans vos paramètres de Phpstorm essayez d'augmenter les sections simultanées max. Cela devrait réduire la suspension et les blocages, mais aura tout de même un impact sur le rendement selon mon expérience.