启用php-fpm的slowlog来分析Linux CPU占用过高问题
先来说说什么是PHP-FPM。它其实是PHP源代码的一个补丁,PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。
PHP-FPM 的配置文件位置在/usr/local/php/etc/php-fpm.conf。打开 php-fpm.conf,里面不是有个request_slowlog_timeout吗?如下:
request_slowlog_timeout = 3s
slowlog = var/log/slow.log
它的值默认为0,这说明它是不开启slowlog的。设个值就代表开启了,把它的值改为3s,它的意思就是某个什么函数或脚本执行时间如果超过3s,就把它写入到slowlog里面,这样我就可以查了,是哪个函数或脚本执行时间比较长。
再来说slowlog的目录,它写了var/log/slow.log,没错,var前面是没有/的(所以它是相对路径,不是绝对的),所以它的路径其实就是在当前路径的var/log/slow.log下,完整的路径就是/usr/local/php/var/log/slow.log。
打开slow.log,截取最下面的一段如下:
[16-Feb-2016 14:24:06] [pool www] pid 22398
script_filename = /home/wwwroot/ihacksoft/index.php
[0x000000000387b018] mysql_fetch_object() /home/wwwroot/ihacksoft/wp-includes/wp-db.php:1241
[0x000000000387a880] query() /home/wwwroot/ihacksoft/wp-includes/wp-db.php:1538
[0x000000000386a700] get_results() /home/wwwroot/ihacksoft/wp-includes/query.php:2947
[0x000000000386a538] get_posts() /home/wwwroot/ihacksoft/wp-includes/query.php:3246
[0x000000000386a3e0] query() /home/wwwroot/ihacksoft/wp-includes/query.php:3352
[0x00000000038696d0] __construct() /home/wwwroot/ihacksoft/wp-content/themes/ihacksoft/functions.php:249
[0x00000000038690c8] kriesi_pagination() /home/wwwroot/ihacksoft/wp-content/themes/ihacksoft/common/posts.php:55
看吧,这些函数的执行都是超过3s的,前面几个是 WordPress 默认的,没有办法去修改,不过最后面的 kriesi_pagination 是我们自定义的函数(分页函数),看来它的执行效率不高,可以考虑优化。
- 属于分类:技术乐园
- 本文标签:
- 流行热度:超过 1,110 人阅读
- 生产日期:2016年02月16日 - 15点45分20秒
- 相关内容: