PHP-FPM + Nginx: Socket vs. TCP/IP und sysctl tweaking

PHP-FPM & Nginx: Socket vs. TCP/IP in Verbindung mit sysctl optimieren

Oft wird behauptet, dass TCP/IP besser skaliert als Unix-Sockets. Das mag vl. zutreffen, wenn das Socket-Limit, des Systems, nicht angepasst wird. Bei Ubuntu liegt das Unix-Socket Connection-Limit z.B. bei 128. Somit können nur 128 PHP Requests gleichzeitig abgearbeitet werden. Doch was ist eigentlich der Vorteil von Unix-Sockets? Bei den Unix-Sockets wird der TCP/IP Overhead (TCP Header usw.) eingespart. Somit werden hier Ressourcen gespart und die Requests schneller abgearbeitet, auch wenn es nur ein minimaler Unterschied ist. Gerade bei größeren Projekten / Diensten macht sich der Unterschied bemerkbar.

Das Limit sollte über zwei Dateien erhöht werden: /etc/php5/fpm/pool.d/www.conf

php-fpm listen.backlog = 5000

und /etc/sysctl.d/10-unix-socket.conf

net.core.somaxconn=5000

Anschließend werden die Einstellungen per

sysctl -p && service nginx restart

Diese Anpassungen beheben auch Fehler die entsprechend geloggt werden:

connect() to unix:/var/run/php5-fpm.sock failed oder **apr_socket_recv: Connection reset by peer (104)**

Diese Fehler äußeren sich meistens in einem 502 Fehler auf Client-Seite.