很多人介绍说nginx对高并发有着优良的性能,于是配了一个Nginx+php-fpm来跑在线代理程序,刚配置好时运行正常,但运行一段时间,网站打开很慢,打开网站后,在输入框输入要访问的网站,也慢得不行。在网站打开慢时,在SSH终端上输入命令也慢,怀疑是机房网速问题,但ssh连接网站时,打开也慢,基本可以排除机房的网速问题。
当打开网站慢时,把服务器重启后,会很快起来,后来发现,用 /usr/local/php/sbin/php-fpm restart
把fastcgi重启下也会快起来,最把它加入计划任务,每小时重启下,基本保证网站不会慢,但终究不是办法。
查看了nginx.log和php-fpm.log,根据里面的错误,总算是把问题解决了,主要修改了两个地方。
1、问题:
发现/usr/local/php/etc/php-fpm.conf文件里定义的打开文件描述符的限制数量是
51200
但用 命令ulimit -n查看,发现只有1024
我已在/etc/rc.local里添加了
ulimit -SHn 51200
竟然没生效
解决:
vi /etc/security/limits.conf
文件最后加上
2、问题:
用命令
netstat -np | grep 127.0.0.1:9000 |wc -l
发现只有100多
解决:
根据服务器内存情况,可以把PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以
服务器上内存为8G,我把PHP FastCGI子进程数调整到300
vi /usr/local/php/etc/php-fpm.conf
将max_children修改为300
300
重启服务器,这样,网站打开速度快,而且稳定了。
附:如果高负载网站使用PHP-FPM管理FastCGI,刚参考如下调优方法,或许可以给你带来一些帮助。
1.尽量少安装PHP模块,最简单是最好(快)的
2.把您的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以
注:我的1g测试机,开64个是最好的,建议使用压力测试获取最佳值
3.使用socket连接FastCGI,linux操作系统可以放在 /dev/shm中
注:在php-fpm.cnf 里设置/tmp/nginx.socket就可以通过socket连接 FastCGI了,/dev/shm是内存文件系统,放在内存中肯定会快了 (这一步待确认)
4.调高linux内核打开文件数量,可以使用这些命令(必须是root帐号)
注:我是修改/etc/rc.local,加入ulimit -SHn 51200的
5. 增加 PHP-FPM 打开文件描述符的限制:
# vi /path/to/php-fpm.conf
找到“1024”
把1024 更改为 4096 或者更高.
重启 PHP-FPM.
6.使用php代码加速器,例如 eAccelerator, XCache.在linux平台上可以把`cache_dir`指向 /dev/shm。
您可能感兴趣的文章:
nginx下设置php-fpm使用socket文件的方法分享
nginx中php-fpm使用sock方式配置的例子
深入理解php-fpm.conf中的两个重要参数
ngnix与php-fpm 安装一例
有关nginx+php-fpm配置文件的组织结构
在nginx中查看php-fpm工作状态
Centos下yum安装nginx+PHP-FPM+eAccelerator+mysql