php-fpm配置

 配置文件:php-fpm.conf 

 开启慢日志功能的:

slowlog = /usr/local/var/log/php-fpm.log.slow

request_slowlog_timeout = 5s

当某个请求的时间超过了5秒,就会在慢日志中记录相应的记录,注意上面的时间5s,不能忽略了单位,相应的还有其他单位,m分,h时

php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:

[21-Nov-2016 10:30:38] [pool www] pid 11877

script_filename = /var/www/ceshi/c.php

[0xb70fb88c] sleep() /var/www/ceshi/c.php:2

通过日志,我们就可以知道第2行的sleep 函数有点问题,这样我们就能追踪问题了。


Fpm的三种模式

static静态模式

pm=staticpm.max_children = 10始终保持10个worker子进程

dynamic动态模式

pm=dynamicpm.min_spare_servers = 1 //所需的空闲服务器进程的最小数目pm.max_spare_servers = 3 //所需的空闲服务器进程的最大数目pm.max_children = 10 //最大子进程数pm.start_servers = 2//最小子进程数量

ondemand按需模式

pm=ondemand
pm.process_idle_timeout = 10pm.process_idle_timeout的值(默认值为10s),则关闭该worker。这个机制可能会关闭所有的worker
php-fpm启动的时候,不会启动任何一个worker,而是按需启动,只有当连接过来的时候才会启动。
启动的最大worker数决定于pm.max_children的值,同时受限全局配置process.max。

Fpm的主进程与子进程关系

1.kill掉master进程,留下worker进程

kill master进程号

master只是负责监听管理工作,并不是很多人认为的把客户端发来的请求分给
worker进程处理,而是由worker进程负责客户端的请求监听和处理。

2.kill掉worker进程,留下master进程

kill worker进程号

一旦kill掉worker进程后,会重启一个新的worker进程。因此客户端请求肯定会得到响应处理。
这进一步验证了的上面的结论,master进程负责监听子进程的状态,子进程挂掉之后,会发信号给master
进程,然后master进程重新启一个新的worker进程。