Действия

Php-fpm: различия между версиями

Материал из lulzette's wiki

Нет описания правки
Нет описания правки
 
(не показано 12 промежуточных версий этого же участника)
Строка 1: Строка 1:
= Подключение =
[[Category:Админство (Ops)]]
[https://habr.com/ru/post/358714/ О zend_extension и extension] <br>
Всякое о php-fpm


Лучше всего использовать сокет, т.к. он работает быстрее, чем tcp, сравнение можно найти здесь: https://stackoverflow.com/questions/14973942/tcp-loopback-connection-vs-unix-domain-socket-performance :
Основной конфиг хранится в <code>/etc/php/*version*/fpm/php-fpm.conf</code>, конфиг самого пхп расположен в php.ini в той же директории, конфиг пула - <code>pool.d/poolname.conf</code>


<code>
= Connection =
 
Лучше всего использовать сокет для подключения к php-fpm, т.к. он работает быстрее, чем tcp, сравнение можно найти здесь: https://stackoverflow.com/questions/14973942/tcp-loopback-connection-vs-unix-domain-socket-performance :
 
<source>
#Nginx:
#Nginx:
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
Строка 9: Строка 15:
#php-fpm:
#php-fpm:
listen = /var/run/php5-fpm.sock
listen = /var/run/php5-fpm.sock
</code>
</source>
 
= Performance =
 
Надежнее всего ondemand, но он медленный ибо необходимо время на инициализацию, лучше использовать dynamic или static, однако с ними может возникнуть непонятная 502 (возможно чисто на моем хосте проблема такая):
 
<source>
;pm = ondemand
;pm.max_children = 4 ;сколько максимально "детей" (ondemand,static,dynamic)
 
 
;dynamic
pm = dynamic
pm.max_children = 4 ;максимальное количество дочерних процессов
pm.min_spare_servers = 1 ;минимальное количество процессов, ожидающих соединения (запросов для обработки)
pm.max_spare_servers = 3 ;максимальное количество процессов, ожидающих соединения (запросов для обработки)
pm.start_servers = 2 ;количество процессов при старте
 
</source>
 
= Stability =
 
У меня на сервере сама по себе возникала моментальная ошибка 502 с сообщением в логе php-fpm:
<source>
[20-Sep-2020 20:00:20] WARNING: [pool www] child 7437 exited on signal 11 (SIGSEGV) after 1.353950 seconds from start
[20-Sep-2020 20:00:20] NOTICE: [pool www] child 7440 started
</source>
 
От такого помогут директивы <code>emergency_restart_threshold</code> и <code>emergency_restart_interval</code>, при указании данных директив и получении SIGSEGV или SIGBUS детьми php-fpm будет перезапущен:
 
<source>
emergency_restart_threshold = 10 ;пороговое количество ошибок перед рестартом
emergency_restart_interval = 1m ;в течение какого периода
</source>
 
= src =
 
[http://pektop.net/2013/09/sovety-po-nastrojke-i-optimizacii-nginx-i-php-fpm/ Разное]
 
[https://rtfm.co.ua/nginx-nastrojka-servera-i-php-fpm/ Раздел "Stability"]
 
[https://hcbogdan.com/php/2016/09/16/php-fpm-dynamic/ Performace & Connection]
 
[https://ruhighload.com/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+php Оптимизация PHP ruhighload]

Текущая версия от 14:29, 12 января 2021

О zend_extension и extension
Всякое о php-fpm

Основной конфиг хранится в /etc/php/*version*/fpm/php-fpm.conf, конфиг самого пхп расположен в php.ini в той же директории, конфиг пула - pool.d/poolname.conf

Connection

Лучше всего использовать сокет для подключения к php-fpm, т.к. он работает быстрее, чем tcp, сравнение можно найти здесь: https://stackoverflow.com/questions/14973942/tcp-loopback-connection-vs-unix-domain-socket-performance :

#Nginx:
fastcgi_pass unix:/run/php/php7.4-fpm.sock;

#php-fpm:
listen = /var/run/php5-fpm.sock

Performance

Надежнее всего ondemand, но он медленный ибо необходимо время на инициализацию, лучше использовать dynamic или static, однако с ними может возникнуть непонятная 502 (возможно чисто на моем хосте проблема такая):

;pm = ondemand
;pm.max_children = 4 ;сколько максимально "детей" (ondemand,static,dynamic)


;dynamic 
pm = dynamic
pm.max_children = 4 ;максимальное количество дочерних процессов
pm.min_spare_servers = 1 ;минимальное количество процессов, ожидающих соединения (запросов для обработки)
pm.max_spare_servers = 3 ;максимальное количество процессов, ожидающих соединения (запросов для обработки)
pm.start_servers = 2 ;количество процессов при старте

Stability

У меня на сервере сама по себе возникала моментальная ошибка 502 с сообщением в логе php-fpm:

[20-Sep-2020 20:00:20] WARNING: [pool www] child 7437 exited on signal 11 (SIGSEGV) after 1.353950 seconds from start
[20-Sep-2020 20:00:20] NOTICE: [pool www] child 7440 started

От такого помогут директивы emergency_restart_threshold и emergency_restart_interval, при указании данных директив и получении SIGSEGV или SIGBUS детьми php-fpm будет перезапущен:

emergency_restart_threshold = 10 ;пороговое количество ошибок перед рестартом
emergency_restart_interval = 1m ;в течение какого периода

src

Разное

Раздел "Stability"

Performace & Connection

Оптимизация PHP ruhighload