Включение удаленной отладки 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 не медленный.
Знайте за помощью.
Ответы
Ответ 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
был просто в порядке.