php-fpm有3种对子进程的管理方式
① pm = static
1 | 始终保持一个固定数量的子进程,这个数由pm.max_children定义,这种方式很不灵活,也通常不是默认的 |
② pm = dynamic
1 | 启动时,会产生固定数量的子进程(由pm.start_servers控制)可以理解成最小子进程数,而最大子进程数则由pm.max_children去控制,OK,这样的话,子进程数会在最大和最小数范围中变化,还没有完,闲置的子进程数还可以由另2个配置控制,分别是pm.min_spare_servers和pm.max_spare_servers,也就是闲置的子进程也可以有最小和最大的数目,而如果闲置的子进程超出了pm.max_spare_servers,则会被杀掉 |
③ pm = ondemand
1 | 和pm= dynamic相反,把内存放在第一位,他的工作模式很简单,每个闲置进程,在持续闲置了pm.process_idle_timeout秒后就会被杀掉,有了这个模式,到了服务器低峰期内存自然会降下来,如果服务器长时间没有请求,就只会有一个php-fpm主进程,当然弊端是,遇到高峰期或者如果pm.process_idle_timeout的值太短的话,无法避免服务器频繁创建进程的问题 |
php-fpm和nginx状态监控
新增nginx站点
1 | server { |
修改php-fpm的配置
1 | vi www.conf |
使用curl指令查看php-fpm和nginx的status
1 | curl localhost/nginx_status |
nginx status的含义
- active connections – 活跃的连接数量
- server accepts handled requests — 总共处理了11989个连接 , 成功创建11989次握手, 总共处理了11991个请求
- reading — 读取客户端的连接数.
- writing — 响应数据到客户端的数量
- waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接
php-fpm status的含义
- 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,缓慢请求的数量
基常用维护指令
- 获取php-fpm的平均消耗内存
- 指令:ps –no-headers -o “rss,cmd” -C php-fpm | awk ‘{ sum+=$1 } END { printf (“%d%s\n”, sum/NR/1024,”M”) }’
进程数优化方案
- pm = dynamic
- 说明使用动态方式
- pm.max_children = 130
- 说明:必须 <= pm.max_spare_servers
- pm.start_servers = 80
- 说明:内存容量 / 进程平均消耗内存大小,保持50%余量左右;
- 例如: 平均php-fpm消耗20M内存,4G内存最低可以保持 2G/30M=60
- pm.min_spare_servers = 50
- 说明:动态方式下的最小php-fpm进程数
- pm.max_spare_servers = 120
- 例如: 平均php-fpm消耗30M内存,3G/30M=100
- pm.max_requests = 512
- 说明:设置每个子进程重生之前服务的请求数;