阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之php-fpm配置及其与Nginx的通信

时间:2020-06-28 14:58:13   收藏:0   阅读:97

一、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 高并发优化

原文:https://www.cnblogs.com/ccdv/p/13201536.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!