关于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,就不会出现以上问题,速度都极快。那么问题出现在哪里了呢,我该如何优化呢?请大家帮我看看。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一个是走 HTTP(即 TCP Socket),一个是走 Unix Socket。
前者的开销肯定是比后者大的,但胜在高并发时表现稳定。
你这个测试结果我猜是第二次压测时前面的 TCP 连接没回收掉,你可以抓一下 TCP 包看一下是不是这样。如果是的话 nginx 配置一下
fastcgi_keep_conn
和keepalive
这俩参数再测一遍看看。如果你的项目上线后并发量不会很大(1k 以内这种),就用 Unix Socket;反之用 HTTP。