web-dev-qa-db-ja.com

xdebugリモートデバッグを有効にすると、Apacheサーバーが非常に遅くなります

xdebug.remote_enable=1を設定してxdebugを有効にすると、Apacheサーバーは非常に遅くなります。設定を0に変更すると、正常です。

ここで同じ質問を見つけました: XDebug really slow 、しかし答えは役に立たない。プロファイリングを有効にしませんでした:

xdebug.profiler_enable=0
xdebug.auto_trace = 0
xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c

/ tmp/xdebugフォルダーの下に何もないことを確認しました。

Xdebugリモートデバッグが有効で、PHPStormでデバッグリスニングを有効にすると、ブレークポイントで停止するのに少し時間がかかりますが、phpstormデバッグリスニングを無効にするほど遅くはありません。

私の環境は:php + Apache + xdebugローカルcentos VM、mysql dbおよびPHPStorm開発用のWindowsデスクトップ。 MySQLは遅くありません。

ヘルプに感謝します。

48

私の場合、これは

xdebug.remote_autostart = 1

php.iniで設定します。これにより、xdebugはすべての要求でリモートデバッガーに接続しようとします。私はいくつかのPHP=スタイル、auto_preppend_fileおよび他のPHPファイルをリクエストで処理し、それぞれについて約2秒待機しました。 15秒程度。

xdebug.remote_autostart = 0

問題を完全に解決しました。 xdebugは、デバッグCookieが存在する場合にのみ接続しますこの修正が機能するためにデバッグセッションにない場合は、デバッグクッキー/パラメータを削除する必要があることに注意してください

xdebugのセットアップに使用する私の構成 です。

54
Tomáš Fejfar

また、XDebugでパフォーマンスが低下した(ミリ秒ではなく6秒でCaptchaを読み込む)このページのコメントを読んで、原因を特定する方法を見つけました。

プロファイラをオフにし、ロード時間を3で割った。まだ遅いが、すでに良くなっている。

xdebug.profiler_enable = 0
24
user2992220

さらに参照...誰かが同じ/同様の問題を抱えている場合...(60秒のタイムアウト)

最初の二重チェックxdebug.remote_autostartは、自動接続を回避するために無効になっています。
@LazyOneが指摘したように、@Tomáš Fejfarも説明しています。

xdebug.remote_autostart
Type:ブール値、デフォルト値:0
通常、特定のHTTP GET/POST変数を使用してリモートデバッグを開始する必要があります( リモートデバッグを参照 )。この設定が1に設定されている場合、Xdebugは常にリモートデバッグセッションを開始し、クライアントに接続しようとします(GET/POST/COOKIE変数が存在しませんでした。

これにより、デバッグCookieが存在しなかった場合、通常の速度を回復します.
しかし!...サーバーから非常に遅い応答(60秒のタイムアウト)を取得しますCookieが手動でアクティブ化されたとき

したがって、 Xdebug Documentation を読んで設定を確認した後、
私はxdebug.remote_connect_backを有効にしていたことがわかりました

xdebug.remote_connect_back
Type:ブール値、デフォルト値:0、Xdebug> 2.1で導入
有効にすると、xdebug.remote_Host設定は無視され、XdebugはHTTPリクエストを行ったクライアントへの接続を試みます。 $ _SERVER ['REMOTE_ADDR']変数をチェックして、使用するIPアドレスを見つけます。使用可能なフィルターがないため、アドレスがxdebug.remote_Hostと一致しない場合でも、Webサーバーに接続できるユーザーは誰でもデバッグセッションを開始できることに注意してください。

そのため、サーバーへのすべての呼び出しがデバッグされようとしていたため、サーバーが非常に遅くなり、安全性も低下しました。

このオプションを無効にし、マシンを指すxdebug.remote_Hostが明確に定義されていることを確認しました。許容できる応答が1秒以内にありました。 Cookieが有効になっている場合のみ

要するに、私の設定ファイルは次のようになります:

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"

注:php.iniではなく、etc/php5/conf.d/xdebug.iniファイルでこの変更を行いました。

Edit:
As@Riim@jdunk指摘する 両方のおかげで 、設定することもできます:
 *詳細はコメントをご覧ください 

xdebug.remote_cookie_expire_time = 0
// or
xdebug.remote_cookie_expire_time = -9999
21
gmo

PHPStorm 7.1とXampp 1.8.2によってインストールされたApacheサーバーを使用していますが、これらはすべてWindows 8.1で使用されています。 Chromeと、ブレークポイントが設定されているデバッグモードのPHPStormとの間の相互運用性が遅いことがありました。

XDebug dllの最新バージョンをインストールすることで速度が著しく向上し(ダウンロードするバージョンを決定するには XDebugウィザード を使用します)、php/ext dirにdllをコピーし、php.iniを変更して新しいXDebug dllがロードされます。 Apacheを停止して、違いを確認します。

内部Eclipse Webブラウザーを使用して、Eclipse(PDT付きのJuno)でwebappをデバッグするときに、同様のパフォーマンスの向上が発生したことを確認できました。

また、xdebug.remote_autostart = 1を常に有効のままにしておく場合は、Phpstorm設定で最大同時セクションを増やしてみてください。これにより、ハングやブロックが減りますが、私の経験に基づいたパフォーマンスへの影響は依然として生じます。

enter image description here

3
MacNeil

私の場合、PHPStormに設定された200以上のブレークポイントがxdebugによるすべてのリクエストで評価されるため、パフォーマンスが低下していました。

PHPStormでこれらのブレークポイントをクリアすると、要求ごとにパフォーマンスが60秒から6秒に増加しました。

1
Jovan D.

ポート9000で他のサービスが動作している場合、Xdebugはポート9000で自分のサーバーに接続できず、リクエストごとにタイムアウトになるため、速度が遅くなることがあります。

XDebugがリッスンしているデフォルトのポート(9000)を変更してみてください。この例では9090を使用しましたが、空いているポートであれば何でも使用できます。

xdebug.remote_port=9090

次に、xDebugがIDEでリッスンしているポートを忘れずに変更します。VisualStudio Codeを使用しています。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.Microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9090,
            "log": true
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9090
        }
    ]
}
1
Santi Barbat

ここで発生するネットワークタイムアウトがある可能性があります。何が問題なのかを知る最良の方法は、コマンドラインスクリプトをデバッグすることです。それでも同じ問題がある場合は、straceを使用して、何がハングしているかを確認します。

export XDEBUG_CONFIG="idekey=yourname"
strace -tt -o /tmp/strace.log php full/path/to/script.php

次に、/tmp/strace.logそして、スローダウンが発生する場所を確認します。

1
Derick

私にとっては、Xdebugバージョン2.7.2は、ベンダーのautoload.php Xdebugバージョン2.6.0で問題ありませんでした。

0
Paul Bönisch