Подтвердить что ты не робот

Включение удаленной отладки xdebug делает сервер Apache очень медленным

Если я включу xdebug, установив xdebug.remote_enable=1, сервер apache становится очень медленным; как только я изменю настройку на 0, это нормально.

Я нашел здесь один и тот же вопрос: XDebug действительно медленный, но ответ не помогает. Я не включил профилирование:

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, my mysql db и PHPStorm на рабочем столе Windows для разработки. MySQL не медленный.

Знайте за помощью.

4b9b3361

Ответ 1

В моем случае это было вызвано тем, что

xdebug.remote_autostart = 1

установить в php.ini. Это заставляет xdebug пытаться подключаться к удаленному отладчику при каждом запросе. У меня в запросе были некоторые стили PHP, auto_preppend_file и другие файлы PHP, и для каждого из них он ждал примерно 2 сек, что в сумме составляло sth. как 15 секунд или около того. настройка

xdebug.remote_autostart = 0

решил проблему полностью. xdebug подключается только при наличии файла cookie отладки. Обратите внимание, что вам нужно удалить файл cookie/param отладки, если вы не находитесь в сеансе отладки, чтобы это исправление работало.

Вот мой конфиг, который я использую для настройки xdebug.

Ответ 2

Опытная и низкая производительность с XDebug (загрузка Captcha за 6 секунд вместо миллисекунд) Замечания на этой странице заставили меня понять причину.

Отключил профайлер, и время загрузки было разделено на 3. Все еще медленно, но лучше уже.

xdebug.profiler_enable = 0

Ответ 3

Точно так же, как дальнейшая ссылка... на случай, если у кого-то возникнет та же/похожая проблема...

Первая двойная проверка xdebug.remote_autostart отключена, чтобы избежать автоматического подключения.
Как отметил @LazyOne, @Tomáš Fejfar объясняет.

xdebug.remote_autostart
Тип: логическое, Значение по умолчанию: 0
Обычно вам нужно использовать определенную переменную HTTP GET/POST для запуска удаленной отладки (см. Удаленная отладка). Если для этого параметра установлено значение 1, Xdebug всегда будет пытаться запустить сеанс удаленной отладки и попытаться подключиться к клиенту, даже если переменная GET/POST/COOKIE отсутствовала.

С этим я восстанавливаю свою нормальную скорость, когда отладочный файл cookie отсутствует...
Но!... Я все еще получаю очень медленный ответ (60-секундный тайм-аут) от сервера, когда cookie был активирован вручную.

Итак, после прочтения документации Xdebug и проверки моей конфигурации,
Я узнаю, что я xdebug.remote_connect_back

xdebug.remote_connect_back
Тип: логическое, Значение по умолчанию: 0, Введено в Xdebug> 2.1
Если этот параметр включен, параметр xdebug.remote_host игнорируется, и Xdebug попытается подключиться к клиенту, который сделал HTTP-запрос. Он проверяет переменную $ _SERVER ['REMOTE_ADDR'], чтобы узнать, какой IP-адрес использовать. Обратите внимание, что фильтр недоступен, и любой, кто сможет подключиться к веб-серверу, сможет запустить сеанс отладки, даже если его адрес не совпадает с xdebug.remote_host.

Таким образом, все обращения к серверу пытались отлаживаться, что делало сервер очень медленным и небезопасным.

Отключите эту опцию и xdebug.remote_host что у меня есть четко определенный 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"

Примечание. Я внес эти изменения в файл etc/php5/conf.d/xdebug.ini а не в php.ini.

Редактировать:
Как @ Riimu & @ jdunk указать это благодаря так, вы можете захотеть установить также:
* см. комментарии для деталей

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

Ответ 4

Я использую PHPStorm 7.1 и сервер Apache, установленный Xampp 1.8.2, все это под Windows 8.1. Я действительно испытывал медленную совместимость между Chrome и PHPStorm в режиме отладки при наличии точек останова.

Скорость заметно улучшилась, установив последнюю версию dll XDebug (используйте мастер XDebug, чтобы определить, какую версию загрузить), скопируйте dll в вашем php/ext dir и измените php.ini, чтобы новая DLL XDebug была загружена. Stopstart Apache и увидеть разницу.

Я мог убедиться, что аналогичное повышение производительности произошло при отладке webapp с помощью Eclipse (Juno с PDT) с использованием внутреннего веб-браузера Eclipse.

Ответ 5

Кроме того, если вы хотите оставить xdebug.remote_autostart = 1 включенным все время, в настройках Phpstorm попробуйте увеличить максимальное количество одновременных разделов. Это должно уменьшить зависание и блоки, но все равно приведет к снижению производительности, исходя из моего опыта.

enter image description here

Ответ 6

Вероятно, есть некоторые сетевые тайм-ауты, которые здесь происходят. Лучший способ выяснить, что происходит, - попытаться отладить командную строку script. Если это все еще имеет ту же проблему, используйте strace, чтобы увидеть, на что он висит:

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

Затем посмотрите /tmp/strace.log и посмотрите, где происходит замедление.

Ответ 7

В моем случае низкая производительность была вызвана наличием 200+ контрольных точек, установленных в PHPStorm, которые были оценены по каждому запросу с помощью xdebug.

Очистка этих точек останова в PHPStorm увеличила производительность с 60 секунд до 6 секунд за запрос.

Ответ 8

Иногда, если у вас есть другие службы, работающие в порту 9000, Xdebug не сможет подключиться к своему серверу через порт 9000, и это замедлит работу, потому что он будет получать тайм-аут при каждом запросе.

Попробуйте изменить порт по умолчанию (9000), где прослушивает xDebug, для примера я использовал 9090, но вы можете использовать любой свободный порт:

xdebug.remote_port=9090

Затем не забудьте изменить порт, где xDebug прослушивает вашу IDE, я использую код Visual Studio:

{
    // 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
        }
    ]
}

Ответ 9

Для меня Xdebug версии 2.7.2 был медленным, включая вендор autoload.php Xdebug ersion 2.6.0 был просто в порядке.