Нахождение узкого места Nginx/PHP-FPM, которое вызывает случайные 502 ошибки шлюза

Вы готовы изменить http серверы? Рассмотрите nginx вместо апача затем.

И используйте http://wiki.nginx.org/NginxHttpRewriteModule

3
задан 7 January 2012 в 19:30
2 ответа

Официальная рекомендация: worker_processes = количество ядер CPU

set worker_processes 16;

1
ответ дан 3 December 2019 в 06:42

Спорадические ошибки 502 от балансировщиков нагрузки, таких как HAProxy и nginx, обычно вызваны тем, что что-то прерывается в середине потока между LB и веб-сервером.

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

Мне недавно пришлось решить очень похожий сценарий / проблему . Я исключил ресурсы и т. Д., Вызывающие проблему, так как у меня был довольно всесторонний мониторинг, который мне помогал. В конце концов я обнаружил, что ошибка 502 исходила от веб-сервера за балансировщиком нагрузки, возвращающего недопустимые (в данном случае пустые) HTTP-ответы на LB.

Я взял один из веб-серверов и остановил веб-сервер, затем запустил его снова через gdb, затем просмотрел сайт. В конце концов, после некоторого щелчка я увидел, что произошла ошибка сегментации, и это привело к появлению ошибки 502. Я взял обратную трассировку из GDB и отправил ее команде PHP как ошибку, но единственным исправлением для меня было переключить дистрибутив на работу с PHP-ошибкой, которая была там.

Из-за segfault веб-сервер отправлял недопустимый контент к LB, и LB отображал ошибку 502, потому что, что касается, веб-сервер исчез "в середине потока".

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

Я взял обратную трассировку из GDB и отправил ее команде PHP как ошибку, но единственным исправлением для меня было переключить дистрибутив на работу с ошибкой PHP, которая была там.

Из-за ошибки segfault веб-сервер отправлял недопустимый контент к LB, и LB отображал ошибку 502, потому что, что касается, веб-сервер исчез "в середине потока".

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

Я взял обратную трассировку из GDB и отправил ее команде PHP как ошибку, но единственным исправлением для меня было переключить дистрибутив на работу с PHP-ошибкой, которая была там.

Из-за segfault веб-сервер отправлял недопустимый контент к LB, и LB отображал ошибку 502, потому что, что касается, веб-сервер исчез "в середине потока".

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

segfault заставлял веб-сервер отправлять недопустимый контент в LB, а LB отображал ошибку 502, потому что, насколько это касалось, веб-сервер исчез «в середине потока».

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

segfault заставлял веб-сервер отправлять недопустимый контент в LB, а LB отображал ошибку 502, потому что, насколько это касалось, веб-сервер исчез «в середине потока».

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

2
ответ дан 3 December 2019 в 06:42

Теги

Похожие вопросы