昨天早上上班,同事反映论坛打开很慢
赶紧用阿里测,结果是前面接收请求很慢,接收第一个请求需要5秒,把整个页面完全加载出来需要7秒多的时间
查看各服务器的负载,内存都正常
查看nginx的错误日志,有大量的连接拒绝的日志信息
2013/02/28 09:51:58 [error] 3243#0: *67791623 connect() failed (111: Connection refused) while connecting to upstream, client: 120.2 04.196.186, server: bbs.lynn.cn, request: "GET /forum-155-1.html HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "bbs.lynn.cn"

重启nginx和php,瞬间很快,但马上又慢了
监控php-fpm的信息,发现php的进程暴增
php-fpm.conf,都采用的是默认的配置
同事说可以加大一下rlimit_files的设置
rlimit_files = 51200
pm.max_requests = 1024
ulimit -n 51200
重启PHP,情况依旧,还是很慢

又继续查,nginx,php,数据库连接,查询是否慢
全部都很正常啊,崩溃啊
然后同事提醒了一下,说有一段代码可能是有问题,先注释看看
在130上面把代码注释,响应很快,在131上没有注释,找开要很久很久
难道就是这段代码有问题?
查看了下监控的php的进程数,130是有100多个,131是保持在51个
灵光一闪,可能不是代码的原因,是PHP配置的问题

于是果断修改PHP的配置
pm.max_children = 150  #默认配置是50
再重启PHP,测试,OK,打开页面很快了
再查看监控的PHP的进程,每一台服务器大概都在120个左右

现在打开页面很快了,但是登录还是很慢,很次登录大概需要2-3分钟的时候
后来PHPER一直查,原来是有一段代码有问题,修改,提交,上传,同步
OK,登录的问题也解决了
再看监控的PHP的进程,每一台服务器大概在30个左右,又恢复正常了

总结:
这次的主要问题是因为编辑更改了论坛的后台,导致登录慢的
因为页面的所有请求都是经过nginx,nginx再把请求转给PHP
而前面代码的问题,导致php的进程都被占用了没有释放出来
那后面打开页面神马的请求,就一直在等待前面的进程释放释放,所以很慢
增大了 pm.max_children,可以让PHP有更多的进程来处理nginx的请求

这个问题,一开始的时候就跟他们提说PHP的进程要比平时多很多,但是一直没有想到是这个问题引起
记录一下