Назад | Перейти на главную страницу

NGINX + PHP5-FPM перестает работать при высокой нагрузке!

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

У меня очень популярный веб-сайт, который просматривает более 3 миллионов страниц в день. В среднем это 34 просмотра страниц в секунду, но, что более реалистично, в часы пик он достигает более 300 просмотров страниц в секунду. Думайте об этом как о просьбах.

Я использую 64-разрядный сервер Ubuntu 10.04 с 2 процессорами E5620, 12 ГБ оперативной памяти и SSD-накопителем Micron P300 6 ГБ / с. В пиковые часы загрузка ЦП и памяти средняя (используется 20–30% ЦП и половина памяти).

Программное обеспечение, на котором работает этот сайт: NGINX, MySQL, PHP5-FPM, PHP-APC и Memcached. Хорошо, теперь, наконец, суть сообщения, вот мои журналы ошибок. Там регистрируется куча этих ошибок.

/ var / журнал / php5-fpm

Jul 20 14:49:47.289895 [NOTICE] fpm is running, pid 29373
Jul 20 14:49:47.337092 [NOTICE] ready to handle connections
Jul 20 14:51:23.957504 [ERROR] [pool www] unable to retrieve process activity of one or more child(ren). Will try again later.
Jul 20 14:51:41.846439 [WARNING] [pool www] child 29534 exited with code 1 after 114.518174 seconds from start
Jul 20 14:51:41.846797 [NOTICE] [pool www] child 29597 started
Jul 20 14:51:41.896653 [WARNING] [pool www] child 29408 exited on signal 11 SIGSEGV after 114.596706 seconds from start
Jul 20 14:51:41.897178 [NOTICE] [pool www] child 29598 started
Jul 20 14:51:41.903286 [WARNING] [pool www] child 29398 exited with code 1 after 114.605761 seconds from start
Jul 20 14:51:41.903719 [NOTICE] [pool www] child 29600 started
Jul 20 14:51:41.907816 [WARNING] [pool www] child 29437 exited with code 1 after 114.601417 seconds from start
Jul 20 14:51:41.908253 [NOTICE] [pool www] child 29601 started
Jul 20 14:51:41.916002 [WARNING] [pool www] child 29513 exited with code 1 after 114.592514 seconds from start
Jul 20 14:51:41.916501 [NOTICE] [pool www] child 29602 started
Jul 20 14:51:41.916558 [WARNING] [pool www] child 29494 exited on signal 11 SIGSEGV after 114.597355 seconds from start
Jul 20 14:51:41.916873 [NOTICE] [pool www] child 29603 started
Jul 20 14:51:41.921389 [WARNING] [pool www] child 29502 exited with code 1 after 114.600405 seconds from start

/var/log/nginx/error.log

2011/07/20 15:48:42 [error] 29583#0: *569743 readv() failed (104: Connection reset by peer) while reading upstream, client: 77.223.197.193, server: domain.com, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com"
2011/07/20 15:48:42 [error] 29578#0: *571695 readv() failed (104: Connection reset by peer) while reading upstream, client: 150.70.64.196, server: domain.com, request: "GET /page HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com"
2011/07/20 15:48:42 [error] 29581#0: *571050 readv() failed (104: Connection reset by peer) while reading upstream, client: 110.136.157.66, server: domain.com, request: "GET /page HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com"
2011/07/20 15:48:42 [error] 29581#0: *564892 readv() failed (104: Connection reset by peer) while reading upstream, client: 110.136.161.214, server: domain.com, request: "GET /page HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com"
2011/07/20 15:48:42 [error] 29585#0: *456171 readv() failed (104: Connection reset by peer) while reading upstream, client: 93.223.33.135, server: domain.com, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com"
2011/07/20 15:48:42 [error] 29585#0: *471192 readv() failed (104: Connection reset by peer) while reading upstream, client: 74.90.33.142, server: domain.com, request: "GET /page HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com"
2011/07/20 15:48:42 [error] 29580#0: *570132 readv() failed (104: Connection reset by peer) while reading upstream, client: 180.246.182.191, server: domain.com, request: "GET /page HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com"

Наконец, я хочу указать, что я попытался отключить PHP-APC, чтобы проверить, не было ли это ошибкой в ​​opt cacher, но segfaults по-прежнему сохранялись. У меня также установлен PHP5-SUHOSIN, и я тоже отключил его, но ошибки все равно возникают.

Буду очень признателен за любую помощь. Спасибо.

Установите символы отладки для PHP и всех ваших модулей PHP (если их предоставляет Ubuntu; в противном случае вам нужно будет перестроить с включенной отладкой), затем включите дампы ядра в соответствии с моим ответом на этот вопрос всего несколько часов назад. Затем запустите GDB и отправляйтесь в город.