关于PHP-FPM+Nginx+Linux优化

使用如下配置进行测试

nginx

worker_connections  1024;
fastcgi_pass   127.0.0.1:9001;

php-fpm

listen = 127.0.0.1:9001
pm = static
max-children = 50
listen.backlog = 10000

linux

/etc/sysctl.conf

fs.file-max = 100000
net.core.somaxconn = 10000
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 10000

/etc/security/limits.conf

* - nofile 10000

测试结果

bin\ab -n 5000 -c 100 http://192.168.0.184/php/test.php

这是第一次测试结果,速度很快,但如果紧接着第二次测试,速度明显变慢。如果再过一段时间,测试,速度又很快了,如此循环......结果如下:

疑问

如果 nginx 改为 fastcgi_pass /tmp/php-fpm.sock; 并且 php-fpm 改为 listen = /tmp/php-fpm.sock,就不会出现以上问题,速度都极快。那么问题出现在哪里了呢,我该如何优化呢?请大家帮我看看。

阅读 1.5k
1 个回答

一个是走 HTTP(即 TCP Socket),一个是走 Unix Socket。

前者的开销肯定是比后者大的,但胜在高并发时表现稳定。

你这个测试结果我猜是第二次压测时前面的 TCP 连接没回收掉,你可以抓一下 TCP 包看一下是不是这样。如果是的话 nginx 配置一下 fastcgi_keep_connkeepalive 这俩参数再测一遍看看。

如果你的项目上线后并发量不会很大(1k 以内这种),就用 Unix Socket;反之用 HTTP。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题