php-fpm导致服务器负载飙涨?

分类:Linux,问题集 | 作者:凹凸曼 | 发表于2011/12/29 5条评论

最近的看网站打开很慢经常挂掉。。。

访问量也没有增加,之前都是好好的

linux系统负载严重超标。。。一分钟居然到300多。。。

通过查看系统日记没有什么问题,最后发现php-fpm存在以下二点错误。。。

第一种错误

Dec 27 09:37:47.112251 [WARNING] fpm_stdio_child_said(), line 167: child 11503 (pool default) said into stderr: "Dec 27 09:37:47.111260 [ERROR] fpm_unix_init_child(), line 168: setrlimit(RLIMIT_NOFILE) failed: Invalid argument (22)"
Dec 27 09:37:47.112285 [WARNING] fpm_stdio_child_said(), line 167: child 11502 (pool default) said into stderr: "Dec 27 09:37:47.109294 [ERROR] fpm_unix_init_child(), line 168: setrlimit(RLIMIT_NOFILE) failed: Invalid argument (22)"
Dec 27 09:37:47.112301 [WARNING] fpm_stdio_child_said(), line 167: child 11501 (pool default) said into stderr: "Dec 27 09:37:47.108313 [ERROR] fpm_unix_init_child(), line 168: setrlimit(RLIMIT_NOFILE) failed: Invalid argument (22)"

 问题及分析:使用ulimit -n 查看文件打开连接数,在查看一下php-fpm 配置文件里 rlimit_files的值 ,

              发觉php-fpm配置文件打开连接数与系统文件打开连接数不一致 造成的

解决办法: ulimit -Shn 102400 

                接着修改php-fpm配置文件中的  

              <value name=”rlimit_files”>102400 </value>
             然后重启php-fpm服务,问题得到解决
             但是负载还是降不下去。。。接着下面的。。。

 

第二中错误

Dec 27 09:38:07.213414 [WARNING] fpm_request_check_timed_out(), line 146: child 11496, script '/data/www/xxx.xxx.com/member.php' (pool default) executing too slow (3.104162 sec), logging
Dec 27 09:38:07.213570 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
Dec 27 09:38:07.213675 [NOTICE] fpm_children_bury(), line 194: child 11496 stopped for tracing
Dec 27 09:38:07.213684 [NOTICE] fpm_php_trace(), line 139: about to trace 11496
Dec 27 09:38:07.213818 [ERROR] fpm_trace_get_long(), line 78: ptrace(PEEKDATA) failed: Input/output error (5)
Dec 27 09:38:07.213853 [NOTICE] fpm_php_trace(), line 167: finished trace of 11496

 

问题:脚本执行超时,出现Input/output error  

             网站打开很慢,开始觉得是不是程序的问题,但是觉得这个系统是康盛的,理论上不会执行那么久,所以暂时就排除,又怀疑的磁盘,检查了,磁盘运行健康,具体的详细检测,就没法,还有一种可能调用第三放接口,不过通过目前的测试一切正常;接着就是数据表被破坏,检查了一下,也正常;

              后来又 想了一下,转向memcached 看这个服务看有没有问题,因为系统用了缓存机制,我通过测试查看memcached 缓存数据居然连接不去,重启服务又连上去了,一会儿有断开了。。。查看memcached的连接数 -c 设置 1024  后来做了调整了65535  memcached就正常了,目前负载降下来了,具体负载问题,还要观察几天,看是不是此问题造成的php-fpm压力过大,最终负载飙涨,形成连锁反应!

参考文献:http://b.formyz.org/2011/1124/53.html

本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=1242

日志信息 »

该日志于2011-12-29 16:36由 凹凸曼 发表在Linux, 问题集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (5)层:
  1. 蕃茄说道:

    错别字挺多的,I/O问题你也没有说怎么解决的呀?

  2. 新浪微博rss说道:

    我的也在报错,主要有
    NOTICE: child 16924 stopped for tracing
    ERROR: failed to ptrace(PEEKDATA) pid 16814: Input/output error (5)
    NOTICE: finished trace of 16814
    NOTICE: about to trace 16821

  3. cc说道:

    你原来是什么版本的PHP?后来升级到多少呢?

发表评论 »

« »