php-fpm三种对子进程的管理方式
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进程。
发表评论