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% 完全可以接受(请忽视框架效率)

发布于