Подключиться к unix:/var/run/php5-fpm.sock не удалось. Что не так с моей настройкой?
У меня 2 ГБ VPS на DigitalOcean, и я размещаю WordPress 3.9.1 под Debian 7 с NGINX, php-fpm и unix-сокетом.
Он работал отлично до последней недели, когда он начал показывать ошибку "502 bad gateway". Я проверил журналы и обнаружил, что:
Журнал php5-fpm показывает, что pm.max_children было достигнуто и В журнале nginx отображается следующее:
[ошибка] 3239 # 0: * 15188 connect() для unix:/var/run/php5-fpm.sock failed (11: ресурс временно недоступен) при подключении к восходящему потоку, клиент: xxx.xxx.xxx.xxx, server: my.domain, request: "POST/xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "xxx.xxx.xxx.xxx"
Я вручную поменял pm с разными настройками без везения. Я всегда перезапускаю демонов после каждого изменения.
Настройки
pm:
pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 10
pm.max_requests = 200
www.conf имеет функцию listen =/var/run/php5-fpm.sock.
Кто-нибудь со сходным опытом?
Ответы
Ответ 1
Первая проблема заключается в том, что вы задаете 100 max_children, что очень велико для 2GB. Я бы бросил его на 25 детей. См. Мой пост здесь о том, как оптимизировать конфигурацию php-fpm для вашей установки:
ПРЕДУПРЕЖДЕНИЕ: [pool www] кажется занятым (вам может потребоваться увеличить pm.start_servers или pm.min/max_spare_servers), нереститься
Кроме того, использование сокетов unix выполняется немного быстрее, поскольку обеспечивает прямой доступ к сети без каких-либо издержек TCP/IP. С нижней стороны он не так масштабируемо, как TCP/IP. Nginx сбросит 502 ошибки, когда сокеты будут исчерпаны. В этом случае вы можете настроить настройки ОС для размещения большего пула подключений или просто переключиться на TCP/IP.
В вашем fastcgi conf change:
fastcgi_pass unix:/var/run/php5-fpm.sock;
в
fastcgi_pass 127.0.0.1:9000;
Обратите внимание, что порт 9000 является портом по умолчанию, установленным в php-fpm, если вы изменили php-fpm для прослушивания на другом порту, тогда замените 9000 с этим значением. Убедитесь, что вы перезапустили как php-fpm, так и nginx.
Теперь, если после всего этого вы все равно не сможете заставить его работать, а free -m возвращает высокую память, тогда пришло время добавить больше бара на ваш сервер.