说明:
php-fpm和nginx一样,内建了个状态页,可以通过该状态页了解监控php-fpm的状态
具体:
1. php-fpm.conf开用php-fpm状态功能
# grep pm.status_path /usr/local/php/etc/php-fpm.conf pm.status_path = /phpfpm_status
默认情况下为/status,当然也可以改成/phpfpm_status等,我这里是改成/phpfpm_status啦
2. nginx配置
在默认主机里面加上location或者你希望能访问到的主机里面。
server { listen 80; server_name 127.0.0.1; location /nginx_status { stub_status on; access_log off; } location /phpfpm_status { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; } }
3. 重启nginx、php-fpm使配置生效
# /etc/init.d/nginx restart # /etc/init.d/php-fpm restart
4. 打开status页面
# curl http://127.0.0.1/phpfpm_status pool: php_pool process manager: static start time: 07/May/2015:09:29:44 +0800 start since: 4584829 accepted conn: 1697 listen queue: 0 max listen queue: 84 listen queue len: 0 idle processes: 49 active processes: 1 total processes: 50 max active processes: 50 max children reached: 0 slow requests: 29333
5. php-fpm status详解
pool – fpm池子名称,大多数为www process manager – 进程管理方式,值:static, dynamic or ondemand. dynamic start time – 启动日期,如果reload了php-fpm,时间会更新 start since – 运行时长 accepted conn – 当前池子接受的请求数 listen queue – 请求等待队列,如果这个值不为0,那么要增加FPM的进程数量 max listen queue – 请求等待队列最高的数量 listen queue len – socket等待队列长度 idle processes – 空闲进程数量 active processes – 活跃进程数量 total processes – 总进程数量 max active processes – 最大的活跃进程数量(FPM启动开始算) max children reached - 大道进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点。 slow requests – 启用了php-fpm slow-log,缓慢请求的数量
附录:
附录1:php-fpm状态页可以通过带参数实现个性化,可以带参数json、xml、html并且前面三个参数可以分别和full做一个组合。
1.1 json格式
# curl http://127.0.0.1/phpfpm_status?json {"pool":"php_pool","process manager":"static","start time":1430962184,"start since":4584963,"accepted conn":4515,"listen queue":0,"max listen queue":84,"listen queue len":0,"idle processes":49,"active processes":1,"total processes":50,"max active processes":50,"max children reached":0,"slow requests":29333}
1.2 xml格式
# curl http://127.0.0.1/phpfpm_status?xmlphp_pool static 1430962184 4584995 5058 0 84 0 49 1 50 50 0 29333
1.3 html格式
# curl http://127.0.0.1/phpfpm_status?htmlPHP-FPM Status Page
pool | php_pool |
---|---|
process manager | static |
start time | 07/May/2015:09:29:44 +0800 |
start since | 4585046 |
accepted conn | 6009 |
listen queue | 0 |
max listen queue | 84 |
listen queue len | 0 |
idle processes | 49 |
active processes | 1 |
total processes | 50 |
max active processes | 50 |
max children reached | 0 |
slow requests | 29333 |
1.4 full格式
# curl http://127.0.0.1/phpfpm_status?full pid: 22269 state: Idle start time: 29/Jun/2015:10:45:16 +0800 start since: 1339 requests: 537 request duration: 9053 request method: POST request URI: /test.php content length: 114 user: - script: /data/www/coolnull/public/test1.php last request cpu: 0.00 last request memory: 786432 ************************ pid: 21485 state: Idle start time: 29/Jun/2015:10:42:07 +0800 start since: 1528 requests: 604 request duration: 6687 request method: POST request URI: /test2.php content length: 118 user: - script: /data/www/coolnull/public/test2.php last request cpu: 0.00 last request memory: 786432 ************************
以下省略多个PID
full详解
pid – 进程PID,可以单独kill这个进程. You can use this PID to kill a long running process. state – 当前进程的状态 (Idle, Running, …) start time – 进程启动的日期 start since – 当前进程运行时长 requests – 当前进程处理了多少个请求 request duration – 请求时长(微妙) request method – 请求方法 (GET, POST, …) request URI – 请求URI content length – 请求内容长度 (仅用于 POST) user – 用户 (PHP_AUTH_USER) (or ‘-’ 如果没设置) script – PHP脚本 (or ‘-’ if not set) last request cpu – 最后一个请求CPU使用率。 last request memorythe - 上一个请求使用的内存
附录2:用zabbix、nagios监控php-fpm状态页时可能用xml或默认方式。web时则推荐使用html,表格比较清晰
附录3:phpfpm命令英文详解
pool – the name of the pool that is listening on the connected socket, as defined in the php-fpm config.
process manager – the method used by the process manager to control the number of child processes – either ondemand, dynamic or static – set on a per pool basis (in the php-fpm config) by the pm parameter.
start time – the date, time, and UTC offset corresponding to when the PHP-FPM server was started.
start since – the number of seconds that have elapsed since the PHP-FPM server was started (i.e. uptime).
accepted conn – the number of incoming requests that the PHP-FPM server has accepted; when a connection is accepted it is removed from the listen queue (displayed in real time).
listen queue – the current number of connections that have been initiated, but not yet accepted. If this value is non-zero it typically means that all the available server processes are currently busy, and there are no processes available to serve the next request. Raising pm.max_children (provided the server can handle it) should help keep this number low. This property follows from the fact that PHP-FPM listens via a socket (TCP or file based), and thus inherits some of the characteristics of sockets.
max listen queue – the maximum value the listen queue has reached since the server was started.
listen queue len – the upper limit on the number of connections that will be queued Once this limit is reached, subsequent connections will either be refused, or ignored. This value is set by the php-fpm per pool configuration option ‘listen.backlog’, which defaults to -1 (unlimited). However, this value is also limited by the system (sysctl) value ‘net.core.somaxconn’, which defaults to 128 on many Linux systems.
idle processes – the number of servers in the ‘waiting to process’ state (i.e. not currently serving a page). This value should fall between the pm.min_spare_servers and pm.max_spare_servers values when the process manager is dynamic. (updated once per second)
active processes – the number of servers current processing a page – the minimum is 1 (so even on a fully idle server, the result will be not read 0). (updated once per second)
total processes – the total number of server processes currently running; the sum of idle processes + active processes. If the process manager is static, this number will match pm.max_children. (updated once per second)
max active processes – the highest value that ‘active processes’ has reached since the php-fpm server started. This value should not exceed pm.max_children.
max children reached – the number of times that pm.max_children has been reached since the php-fpm server started (only applicable if the process manager is ondemand or dynamic)