本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

php-fpm占用系统资源过高问题解决实例

发布:TangLu2015-2-9 14:15分类: 系统安全 标签: php-fpm 系统资源

服务器概况:
操作系统:CentOS5.3
应用服务:Nginx0.6、PHP-Fpm、MySQL5.1、PHP5.2、Memcached(仅cached游戏系统设置与模板参数据)


问题描述:

测试人员反映在Facebook平台的游戏比其它平台的游戏明显更慢。使用httpwatch查看http请求发现api.php请求花了6秒,且大部分时间是红色(表示服务器运算时间)。通常为2秒,现在6秒,在不同的服务器处理时间相差太多。判断为服务器资源问题。


故障检测:
运行top检查cpu、内存资源消耗情况。可以看出共有602个进程,其中有601个进程休眠了。通常内核进程在80个左右,加上memcached, nginx, mysqld,不会超出100个。剩下的只有php-fpm管理的php-cgi,难道问题发生在这里?

图片1.jpg


接着仔细分析,CPU还有很多剩余资源。而内存几乎消耗殆尽。在消耗CPU资源最多和运行时间最久的进程来看(Mysql,运行1个小时48分钟),占用的资源并不是太多。再看php-cgi,单个php-cgi占用的内存也不算多。那么可以得出一个结论就是:没有某个进程单独占用大量内存,有可能被某些挂起的进程占着内存没有释放


再通过free查看内存使用情况,确认之前的判断,内存耗尽。

图片2.png

运行PS命令查出最终原因。可以看到存在了503个php-cgi进程,每个按0.3%消耗就比较恐怖了。既然知道了是php-cgi导致的,那么就想到是php-fpm在管理php-cgi进程,所以需要检查php-fpm的配置。

图片3.png


将php-conf.conf的max_children值设置为150,系统内存恢复到了正常使用情况。php-cgi进程释放的内存并不会被系统立即回收,一个php-cgi大概占用20MB内存(取决于你加载的php extensions)。所以,有必要限制启动的php-cgi进程数量。那么,这个数量多少合适呢,你可以在服务器高峰期通过top统计出php-cgi数量。也可以像php-fpm建议的那样,通过netstat -np | grep 127.0.0.1:9000来收集数据,通过设置max_children使等待的数量尽量小

图片4.jpg




温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《php-fpm占用系统资源过高问题解决实例
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-184.html  [生成短网址]

已有 0/2425 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~