时间:2021-07-01 10:21:17 帮助过:26人阅读
一、php-fpm的配置
1、 php-fpm的配置,首先要关注进程数量。
php-fpm的进程管理方式有三种:static、dynamic、ondemand。
static方式,开启固定数量(pm.max_children)的子进程;
dynamic方式,子进程的数量是根据以下指令动态设置的。而且这种管理方式,会始终保持至少有1个子进程。
(1)pm.max_children-可以同时存活的最大子进程数。
(2)pm.start_servers-启动时创建的子进程数。
(3)pm.min_spare_servers-处于“空闲”状态(等待处理)的最小子进程数。如果“空闲”进程的数量少于该数量,则将创建一些子进程。
(4)pm.max_spare_servers-处于“空闲”状态(等待处理)的最大子进程数。如果“空闲”进程的数量大于该数量,那么一些子进程将被杀死。
ondemand方式, 启动时不会创建任何子进程。当有新的请求连接时,子进程才会被派生。这种方式以下参数会被使用:
(1)pm.max_children-可以同时存活的最大子进程数。
(2)pm.process_idle_timeout-空闲进程将被杀死的秒数。
一般默认的是动态管理方式,即dynamic方式。如果服务器内存充足,可以考虑用静态管理方式,即static方式,这样可省去php-fpm自动创建进程的时间。
在这些相关的参数中,pm.max_children 是比较关键的一个参数,如果值不够用会报错 recv() failed (104: Connection reset by peer) while reading response header from upstream
,其大小的确定可以参考 服务器内存/2/30
这个公式来确定。其中的30,即一个php进程所占用内存的大小,一般一个进程占 20M到30M的内存。
2、最大请求数max_requests
最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。
这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露。
pm.max_requests = 10240
3、最长执行时间request_terminate_timeout
设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的’max_execution_time’因为某些特殊原因没有中止运行的脚本有用. 设置为 ‘0’ 表示 ‘Off’.当经常出现502错误时可以尝试更改此选项。
当超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。
Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。
(关于502、504错误总结可以参考这篇文章 https://www.kancloud.cn/digest/php-src/136260)
二、php-fpm和Nginx的通信
1、在 linux 中,nginx 服务器和 php-fpm 可以通过 tcp socket 和 unix socket 两种方式实现。
tcp socket
允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。
unix socket
允许在本地运行的进程之间进行通信。
2、Unix域Socket因为不走网络,的确可以提高Nginx和php-fpm通信的性能,但在高并发时会不稳定。
Nginx会频繁报错:connect() to unix:/run/php-fpm/www.sock failed (11: Resource temporarily unavailable) while connecting to upstream
所以,在高并发是可以选择用 tcp socket 的方式通信,但是可以调高nginx和php-fpm中的backlog来提高稳定性。
配置方法为:在nginx配置文件中这个域名的server下,在listen 80后面添加default backlog=1024。
同时配置php-fpm.conf中的listen.backlog为1024。
backlog值的大小应该和并发数大小一致。
本文参考的主要文章:
https://www.kancloud.cn/digest/php-src/136260 php-fpm 与 Nginx优化总结
https://www.cnblogs.com/cocoliu/p/8566193.html nginx php-fpm 高并发优化
阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之php-fpm配置及其与Nginx的通信
标签:引用 eset 通过 内存泄漏 内存泄露 最小 lis max children