邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

php7内核读书笔记-第二章 SAPI
php-fpm的worker进程和master进程
worker进程-处理请求
每个worker进程会竞争地Accept请求,接收成功后解析fastcgi,然后执行相应的脚本,处理完成后关闭请求,继续等待新的连接,这个就是一个worker进程的生命周期。
1.等待请求
2.解析请求 
fastcgi请求到达后被worker接收,然后开始接收并解析请求数据,知道request数据完全到达
3.请求初始化
4.执行php脚本
5.关闭请求
master进程-管理进程
三种不同的进程管理模式
1.静态模式static
2.动态模式dynamic  默认
3.按需模式ondemand
信号
1.SIGINT/SIGTERM/SIGQUIT 
退出fpm在master收到退出信号后将向所有的worker进程发布退出信号,通知worker退出,然后master退出
2.SIGUSR1
重新加载日志文件
3.SIGUSR2
重启fpm,首先master也是回向所有的worker进行发出退出信号,等全部worker成功退出后,master会调用execvp()重新启动一个新的fpm,最后旧的master退出
4.SIGCHLD
php-fpm重启、启动、停止命令
启动php-fpm:
/usr/local/php/sbin/php-fpm

php-fpm需要使用信号控制,master进程可以理解以下信号
INT, TERM 立刻终止
QUIT     平滑终止
USR1     重新打开日志文件
USR2     平滑重载所有worker进程并重新载入配置和二进制模块

重启方法1
先查看php-fpm的master进程号
ps aux|grep php-fpm
然后
kill -USR2 进程号
重启方法2
cat /usr/local/php/etc/php-fpm.conf
找到对应的php-fpm.pid
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'


关闭
kill INT 'cat /usr/local/php/var/run/php-fpm.pid'

php-fpm.conf 配置参数详解及优化
php-fpm.conf 配置参数详解及优化

emergency_restart_threshold = 10
在指定的一段时间内,如果失效的php-fpm子进程数超过这个值,php-fpm主进程优雅重启
emergency_restart_interval = 1m   
设定emergency_restart_threshold 设置采用的时间跨度,s(econds), m(inutes), h(ours), or d(ays)


user = www
拥有这个php-fpm进程池中子进程的系统用户。要把这个设置的值设为运行php应用的非根用户的用户名。

group = www
拥有这个php-fpm进程池中子进程的系统用户组。要把这个设置的值设为运行php应用的非根用户的所属的用户组名。

listen = 127.0.0.1:9000
php-fpm进程池监听的ip地址和端口号,让php-fpm只接受nginx从这里传入的请求。127.0.0.1:9000让指定的php-fpm进程池监听从本地端口9000进入的连接。
可以使用任何不需要特殊权限(大于1024)且没被其他系统进程占用的端口号。

listen.allowed_clients = 127.0.0.1
可以向这个php-fpm进程池发送请求的ip地址(一个或多个)。为了安全,把这个设置为127.0.0.1,即只有当前设备能把请求转发给这个php-fpm进程池。默认情况下,这个是被注释掉的。


pm.max_children = 51
这个设置设定任何时间点php-fpm进程池中最多能有多少个进程。这个设置没有绝对正确的值,应该测试你的php应用,确定每个php进程需要使用多少个内存,然后把这个设置设为设备可能内存能容纳的php进程总数。对大多数中小型php应用来说,每个php进程要使用5-15M内存,假如我们使用的设备为这个php-fpm进程池分配了512可用的内存,每个进程大约10M,就是51个进程。


pm.start_servers = 3
php-fpm启动时php-fpm进程池中立即可用的进程数。同样的,这个设置也没有绝对的正确值。对大多数中小型php应用来说,设置2或者3。这么做是为了先准备好的三个进程,等待请求进入,不让php应用的头几个http请求等待php-fpm初始化进程中的进程。


pm.min_spare_servers = 2
php应用空闲时php-fpm进程池中可以存在的进程数量最小值。这个设置的值一般与php.start_servers设置的值一样,用于确保新进入的http请求无需等待php-fpm在进程中重新初始化进程。


pm.max_spare_servers = 4
php应用空闲时php-fpm进程池中可以存在的进程数量最大值。这个设置的值一般比php.start_servers设置的值要大些,用于确保新进入的http请求无需等待php-fpm在进程池中重新初始化进程。

pm.max_requests = 1000
回收进程之前,php-fpm进程池中各个进程最多能处理的http请求数量。这个设置有助于避免php扩展或者库因编写拙劣而导致不断泄漏内存。建议设置未1000,可根据应用的需求做调整。

slowlog = /path/to/slowlog.log
这个设置的值是一个日志文件在系统文件中的绝对路径。这个日志文件拥有记录处理时间超过N秒的http请求信息,比便找出php应用的瓶颈,进行调试。php-fpm进程池属于的用户和用户组必须有这个文件的写入权限。

request_slowlog_timeout = 5s
如果当前http请求的处理时间超过指定的值,就把请求的回溯信息写入slowlog设置指定的文件。把这个设置的值设置为多少,取决于你认为多长时间算久。一开始,可以设置为5s,s(econds), m(inutes), h(ours), or d(ays)



优惠券
广告位-淘宝
最新微语