linux's docs

23.4.0: PHP配置-backlog高并发


1. nginx & php backlog(影响并发数目)

'''
listen.backlog = 512
'''
# backlog的值决定了php进程接受创建连接请求的队列数目

# 默认系统会把backlog的值设定成128
ss -ln
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      128               127.0.0.1:9000                     *:*
LISTEN     0      128                       *:80                       *:*

## 修改此配置步骤
# 修改系统配置
vim /etc/sysctl.conf
****************************************
# 系统全局参数:每个端口最大监听队列
net.core.somaxconn = 1048576

# 每个网络接口,允许后台排队队列数据包的最大数目
net.core.netdev_max_backlog = 1048576

# 尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 1048576
****************************************

# 修改nginx的backlog
vim /etc/nginx/conf/nginx.conf
****************************************
listen       80 backlog=8192;
****************************************

# 修改php-fpm的backlog
vim /etc/php/php-fpm.conf
****************************************
listen.backlog = 8192
****************************************

# 修改完之后检查状态
ss -ln
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      8192              127.0.0.1:9000                     *:*
LISTEN     0      8192                      *:80                       *:*

2. 用户可启动进程数设定

# 当启动nginx或php时我们需要用户来启动进程,但需要注意的是,centos6中对于某
# 个用户的最大进程数是有限制的
cat /etc/security/limits.d/90-nproc.conf
**************************************
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     1024
root       soft    nproc     unlimited
**************************************
# 上面配置中表示,root是可以无限开进程的,其他用户最多开1024个进程
# 而且,需要避免nginx和php用同一个用户.

Contents