高并发时,会出现php-fpm线程不够用的情况,此时一般需要调整backlog,之前也分析过:如果worker进程不够用,master进程会prefork更多进程,
如果prefork达到了pm.max_children上限,worker进程又全都繁忙,这时master进程会把请求挂起到连接队列backlog里,而backlog默认值是511,除了加大pm.max_children,调整backlog也是有必要的。

下面举例优化策略(摘录自:https://my.oschina.net/kisops/blog/151079):
操作系统以CentOS为例,可通过默认配置 /etc/sysctl.conf 文件进行调整。比如:

    net.core.somaxconn = 1048576 # 默认为128
net.core.netdev_max_backlog = 1048576 # 默认为1000
net.ipv4.tcp_max_syn_backlog = 1048576 # 默认为1024

Nginx调整listen后的backlog值:

listen       80 backlog=8192; # 默认为511

php-fpm配置,调整www.conf里的listen.backlog:

listen.backlog = 8192 # 默认为-1(由系统决定)

Related Posts: 关于PHP-FPM的backlog的默认值 :

avatar