互联网上的文章真TM不靠谱 还是自己来的好 --只写靠谱的文档

nginx+fpm高并发的优化思路及方法

优化思路

  • php opcache开启
  • 系统内核参数

nginx 启用unix socket方式

opcache的开启

参见 https://www.habby.top/archives/44.html

nginx的unix socket方式

常用的nginx+fpm的模式下 经常都是用的tcp端口的形式
在nginx配置中都可见
fastcgi_pass 127.0.0.1:9000;
这种写法
但是在这个写法下,经过老衲2000并发压测(服务器为阿里云独享4核8G) 会有10%左右的错误. 自然是不能接受的

后改为unix socket方式 nginx配制成
fastcgi_pass unix:/dev/shm/php-fpm.sock;
(注意/dev/shm/php-fpm.sock路径是在php-fpm.conf中配置的)
反而大量报错
11: Resource temporarily unavailable

经过搜索发现需要调整系统参数

kernel参数:
/etc/sysctl.conf,不能低于上面的配置

net.ipv4.tcp_max_syn_backlog = 16384
net.core.netdev_max_backlog = 16384 
net.core.somaxconn = 2048

net.core.somaxconn这个值有的文档有些直接修改/proc/sys/net/core/somaxconn,实测该文件其实不可修改

直接编辑/etc/sysctl.conf即可
最后执行
sysctl -p

调整nginx php-fpm参数

php-fpm.conf:
配置文件的
listen.backlog = 8192 # 默认为-1(由系统决定)
有的文档中有写需要配置nginx中的backlog
listen 80 backlog=8192; # 默认为511
但是实测发现,nginx中不用配置,或许没有达到极限值

最后测试 2000并发 qps 600 错误了0.4% 完全可以接受(请忽视框架效率)

标签: nginx backlog配置, opcache参数, phpfpm高并发配置

添加新评论