Будет ли включение XDebug на производственном сервере замедлять работу PHP? - PullRequest
30 голосов
/ 19 августа 2010

Название в значительной степени говорит обо всем ... это плохая идея? Я хотел бы иметь расширенные сообщения отладки, которые XDebug предоставляет на сервер.

[править] Просто чтобы прояснить ситуацию. Я знаю, что есть риски безопасности. Возможно, я должен дополнить свой вопрос и указать более точные причины, почему я хотел бы сделать это.

Наш производственный сервер также содержит платформу для тестирования. Иногда мы используем его для тестирования вещей в среде, максимально приближенной к производственной. Главное, что я ищу - это использование расширенного var_dump().

в XDebug.

Это не сервер приложений для приложений с высоким трафиком, и производительность не так уж велика. Мне было просто любопытно, если XDebug повлияет на производительность заметно .

Кроме того, я думаю, что я мог бы включить его только для VirtualHost, который определяет сайты тестирования.

Ответы [ 9 ]

39 голосов
/ 19 августа 2010

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

Во-первых, когда вы добавляете поведение отладки на ваш сервер, механизм отладки «присоединяется» к процессу PHP и получает сообщения механизма об остановке на точках останова, а это ПЛОХО, потому что наносит удар по высокой производительности иметь другой процесс, останавливающий или «сохраняющий» парсер PHP.

Другая большая проблема заключается в том, что когда установлен отладчик, по крайней мере, большинство из них, как правило, имеют неприятную привычку открывать порты на вашем сервере, потому что они не предназначены для производственных сред, и, как вы знаете, любой Программное обеспечение, которое открывает порты на вашем сервере, открывает двери для любого хакера.

Если вам нужно иметь отладку в своем коде, то в вашем приложении внедрите систему отладки, если она недоступна, поскольку в большинство фреймворков это встроено. Установите значение конфигурации, скажем, DEBUG_ENABLED, и при создании исключений, если это не включен, перенаправьте на мелкую страницу, иначе на уродливую страницу с отладочной информацией, но позаботьтесь о том, какую отладочную информацию вы отображаете на своем сервере. Я надеюсь, что это проясняет все.

РЕДАКТИРОВАТЬ Поскольку мой ответ недостаточно документирован, вам следует проверить эти источники

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

15 голосов
/ 05 сентября 2012

Замедление с коэффициентом 4

Я провел несколько тестов, просто включение модуля без фактической отладки замедляет запрос на моей машине разработки с 1 до 4 секунд

4 голосов
/ 19 августа 2010

С какой стати ты хочешь что-то подобное? Отладка перед развертыванием в производство. Это замедлит работу приложения.

3 голосов
/ 20 ноября 2018

Полное удаление xdebug (даже если он не был включен) увеличило загрузку страницы на 50% (с 60 до 30 мс).У нас был xdebug сидя "спящий" (ожидание триггера).Мы подумали, что, поскольку он неактивен, он не причинит никакого вреда, но, парень, мы ошиблись.

Мы прокомментировали строку zend_extension в конфигурации php около 21:43.Средняя нагрузка также снизилась с 0,4 до 0,2 на ядро:

enter image description here

1 голос
/ 18 октября 2016

Вы всегда можете клонировать ваш действующий сервер с точно такой же конфигурацией, за исключением того, что он не будет публичным. Затем вы можете установить на него XDebug и отлаживать вещи практически с одинаковыми условиями (ну, нагрузка будет разной в реальной жизни и клоне, но в остальном будет то же самое). В этом случае вы отлаживаете что-то в реальной среде, но на реальную жизнь это не влияет.

Примечание. Очевидно, что это ни к кому не относится. Не каждый может легко клонировать сервер. Если вы используете облачные сервисы, такие как AWS и т. Д., Это будет очень просто. Если вы используете инструменты для настройки сервера, такие как Ansible, Chef, Puppet, для создания своего сервера, то это тоже будет просто.

1 голос
/ 15 ноября 2012

Xdebug для добавления полных трасс стека в журналы ошибок, то есть значение ini display_errors, которое, конечно, должно быть выключено (даже в разработке я не хочу этого).Он не разрешает удаленное подключение к отладчику, пока вы не включите параметр ini remote_attach.Хотя это медленнее, если у вас есть таинственная ошибка PHP, такая как выделение максимальной памяти или ошибка сегментации, это единственный способ увидеть, где это произошло на самом деле.

1 голос
/ 19 августа 2010

Вы никогда не должны держать это на производстве.

Ваше приложение никогда не должно распечатывать «эти хорошие отладочные сообщения», так как они совсем не приятны для ваших пользователей. Они являются признаком плохого тестирования и убивают доверие пользователей, особенно в среде предприятия / электронной коммерции.

Во-вторых, чем больше технической информации вы раскрываете, тем больше вероятность того, что вас взломают (особенно, если вы уже обнаруживаете, что на самом деле проблемы с вашим кодом!). Производственные серверы должны регистрировать ошибки в файлах и никогда не отображать их.

Скорость выполнения - ваша наименьшая проблема, в любом случае это повлияет на нее, равно как и на память.

0 голосов
/ 28 января 2017

Вы можете использовать XDebug в производстве, если вы «сделаете это правильно».Вы можете включить расширение в «спящем» режиме, который активируется только через запросы, которые проходят через определенное имя HOSTS.Подробности здесь:

http://www.drupalonwindows.com/en/content/remote-debugging-production-php-applications-xdebug

0 голосов
/ 19 августа 2010

Вы никогда не должны отображать сообщения об ошибках отладки на рабочем сервере.Это уродливо для ваших пользователей, а также представляет угрозу безопасности.Я уверен, что это будет немного медленнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...