LINUX.ORG.RU
ФорумAdmin

[nginx][php][502][VPS] Bad gateway c nginx + php

 , ,


0

1

На впс стоит nginx и php (fastcgi) через spawn-fcgi. Хостятся два небольших сайта. Через какое-то время работы похапе падает и сервер возвращает 502

nginx.log:

2012/04/23 08:56:56 [error] 1687#0: *1104 connect() to unix:/var/run/php-fcgi.sock failed (111: Connection refused) while connecting to upstream, client: 208.115.111.74, server: server.com, request: "GET /robots.txt HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fcgi.sock:", host: "www.server.com"

скрипт запуска пхп:

/usr/bin/spawn-fcgi -f /usr/bin/php5-cgi -s /var/run/php-fcgi.sock -P /var/run/php-fcgi.pid -u www-data -g www-data

Как можно ли решить эту проблему? Гугление не особо помогло.

Попробуйте daemontools. У нас fastcgi именно так поднимаються для nginx.

zunkree ()

php5 должен уметь сам fcgi делать. Вот мой скрипт запуска

nohup env - PHP_FCGI_CHILDREN=700 PHP_FCGI_MAX_REQUESTS=10000 php-cgi -q -b /tmp/php.sock &
PHP_FCGI_MAX_REQUESTS - кол-во запросов после которого fcgi процесс, теоретически, должен быть перезапущен. PHP_FCGI_CHILDREN - кол-во процессов.

Но лучше всего использовать php-fpm. php >= 5.3 умеет(если собран с поддержкой).

fjoe ()
Ответ на: комментарий от KRoN73

Как так? И с чем связаны такие тормоза? Если это из-за того, что на каждый запрос породжается php процесс - то это вполне объяснимо. Может быть там есть настройка типа prefork - запуск определенного кол-ва процессов заранее или просто не закрывать однажды запущенные?

fjoe ()
Ответ на: комментарий от fjoe

И с чем связаны такие тормоза?

Не знаю.

Если это из-за того, что на каждый запрос породжается php процесс - то это вполне объяснимо

В первых [официальных] версиях php-fpm работал как и fcgi по скорости. Хотя сравнение не совсем честное, fcgi у меня тестировался под lighttpd, а fpm — под nginx. Но nginx на последних тестах (в прошлом году) у меня заметно шустрее работал. Правда, на статике. Так что или fpm тормознее fcgi стал, или nginx вызывает fpm дольше, чем lighttpd fcgi.

Надо бы прояснить этот вопрос, но пока не горит, у меня сейчас бутылочное горлышко — дисковая подсистема. Халявный сервер с SAS-винтами глючил, так что пришлось брать с SATA (хоть и с памятью 16Гб против 8Гб), теперь это боком вылезает. Аналогичный SAS-сервер по-прежнему летает, а вот SATA уже до 10..20% в iowait. Надо жёстко оптимизировать mysql :)

KRoN73 ★★★★★ ()
Ответ на: комментарий от fjoe

Может быть там есть настройка типа prefork - запуск определенного кол-ва процессов заранее

Ну, это-то само собой.

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

Да, незадача. Я уже пол года посматриваю на fpm, а тут такое. Придется делать бенчмарки на предмет деградации производительности при переводе серверов.

fjoe ()
Ответ на: комментарий от KRoN73

если есть возможность, можешь провести тесты с apache?
apache-worker + mod_php
apache-prefork + mod_php
apache-worker + mod_fcgid + php-fcgi
apache-prefork + mod_fcgid + php-fcgi
apache-worker + mod_fastcgi + php-fcgi
apache-prefork + mod_fastcgi + php-fcgi

было бы интересно взглянуть на результат.

Komintern ★★★★★ ()
Ответ на: комментарий от Komintern

Не, сейчас точно заниматься этим не буду. Болею, а как поправлюсь — так не до тестов будет, накопилось много работы :)

KRoN73 ★★★★★ ()
Ответ на: комментарий от fjoe

Этот вариант работает, пока падений не было, но первоначальная загрузка страницы неприлично долгая (http://www.0xff.su).

VeroLom ★★ ()
Ответ на: комментарий от VeroLom

Первоначальная - это какая ? Если сразу после запуска php процессов, то, взоможно, скрипты еще не выгрузились в дисковый кэш. Или процессы не успели стартовать. Там 700 штук в моем примере многовато, это для нагруженного сервера с ~500 запросов в секунду. Так что можно смело ставить пару десятков ну или сотню, чтобы с запасом.

firebug говорит, что индекс грузится около секунды. Мне не с чем сравнивать.

fjoe ()
Ответ на: комментарий от fjoe

700 штук для 500 запросов в секунду - что это за жесть такая? Это типа у вас выполняется ~ 500 одновременных запросов каждый по секунде? У вас или php ждет базу/диск, или вообще клиника какая то.

ventilator ★★★ ()
Ответ на: комментарий от KRoN73

Сейчас картина такая (вызов <?php echo 2*2; ?>),

А вы не пробовали мерять что-то, где время выполнения кода больше задержки между nginx+php-fpm? Очевидно что вышеприведенный тест мало чего значит для реальных задач.

ventilator ★★★ ()
Ответ на: комментарий от fjoe

Первоначальная - не кешированная. Я 700 поменял на 30, для моих нужд более чем.

Если у тебя ок, возможно, с моей стороны что-то. Пока особо не тестировал (не знаю, чем и как нагляднее), фаербаг говорит, что индекс «думает» около 5.30 секунд, потом за пол-секунды грузится.

Пока это не критично, главное - чтобы сайт не падал иначе за впс нечем платить будет :)

VeroLom ★★ ()
Ответ на: комментарий от ventilator

Да, всё верно - иногда и базу ждать приходится, или, например, бывают пики запросов до 2000. Потому и fpm приглянулся - может процессы добавлять при необходимости.

fjoe ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.