先来说说什么是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 是我们自定义的函数(分页函数),看来它的执行效率不高,可以考虑优化。