PHP 生命周期
1. 请求 / 响应周期
1). 表示层分析
程序启动 -> 服务端处理请求 -> 响应, 返回客户端 -> 程序结束
2). 底层分析
MINT --> RINT--> PHP 执行 --> RSHUTDOWN --> MSHUTDOWN
a. 模块初始化阶段
PHP 加载每个扩展的代码并调用其模块初始化,进行一些模块所需变量的申请, 内存分配等
b. 请求初始化阶段 (进程 --> 读取, 解析完请求数据之后)
PHP 初始化本次请求执行脚本所需的环境变量。c.PHP 脚本执行阶段
PHP 代码解析执行的过程 (Zend 引擎接管控制权, 将 php 脚本代码编译成 opcodes 并顺次执行)
d. 请求结束阶段
请求处理完后就进入了结束阶段,PHP 就会启动清理程序 (清除程序运行时产生的符号表, 每个变量调用 unset 函数)
e. 模块关闭阶段
资源的清理、php 各模块的关闭操作
PHP 垃圾回收
1.zval 结构存储 (type | value | refcount | is_ref)
1)type 类型 value 值 refcount 引用次数 is_ref 引用状态
2.gc_enable |gc_disable
3.gc_collect_cycles
PHP-FPM 调优
1.etc/php-fpm.d/*.conf
pm.max_children = 100 // 最大子进程数量【pm = static】pm.start_servers = 20 // 启动时创建的子进程数
pm.max_requests = 10240 // 当一个 php-cgi 进程处理的请求数达到这个配置后, 则会自动重启该进程
request_terminate_timeout = 400 // 单个请求的超时中止时间, 超时后会终止进程,nginx 发现信号断了, 就会给客户端返回 502 错误
pm.min_spare_servers = 10 // 保证空闲进程数最小值, 小于此值, 则创建新的子进程
pm.max_spare_servers = 30 // 保证空闲进程数最大值, 大于此值, 此进行清理
参考 PHP 底层的运行机制与原理