Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1292778
  • 博文数量: 107
  • 博客积分: 1456
  • 博客等级: 上尉
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 15:33
文章分类

全部博文(107)

文章存档

2021年(2)

2016年(8)

2015年(8)

2014年(10)

2013年(20)

2012年(38)

2011年(21)

分类: 系统运维

2016-01-13 14:04:56

公司一台服务器上的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的配置文件可能不止一个。


阅读(4327) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~