公司一台服务器上的php页面打开稍微有点慢,打算开启php的slow.log查看。按网上的步骤,编辑php-fpm.conf,将request_slowlog_timeout设置成1,并将slowlog设置成一个正常的路径:
; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
slowlog = var/log/php.log.slow
; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_slowlog_timeout = 1
然后重启php。
网上的步骤就是这些。
但事实上,这样操作之后,尽管系统会自动生成一个php.log.slow的文件,但这个文件的大小一直都是0,php-fpm.log里也没有执行时间超过1s以上的记录。难道是服务器上的程序执行效率都特别高?于是找来一个“慢”程序测试:
$homepage = file_get_contents('');
echo $homepage;
?>
结果发现还是没记录。
后来查看php-fpm.conf,发现有这样一段话:
; Per pool prefix
; It only applies on the following directives:
; - 'slowlog'
大意是,以下设置只在对应pool里生效。而在这些设置里,就包括了slowlog!找到问题了!于是尝试将之前设置在php-fpm.conf里的request_slowlog_timeout跟slowlog注释,并将其复制到网站专属的php pool里(这台服务器配置的是一个网站对应一个php pool):
slowlog = var/log/$pool.log.slow
request_slowlog_timeout = 1
然后重试,发现 php-fpm.log跟slow.log里终于有记录了:
[12-Jan-2016 17:07:18] WARNING: [pool test] child 29653, script '/test/test.shuowan.com/123.php' (request: "GET /123.php") executing too slow (1.178338 sec), logging
script_filename = /test/test.shuowan.com/123.php
[0x00007fc495ada2d8] file_get_contents() /test/test.shuowan.com/123.php:2
小结:网上的方法其实并没有错。只是默认情况下,php-fpm的配置文件只有一个,只修改php-fpm.conf的操作会让人误以为是全局生效的。而且丝毫没有提到这个设置跟pool有关。而在一台承载了多个网站的php服务器上,为了实现权限隔离,管理员通常会将网站分配到不同的php pool里。换句话说,在现实环境里,php-fpm的配置文件可能不止一个。
阅读(4284) | 评论(0) | 转发(0) |