因此,我已安装好 nginx+php-fpm。php-fpm 状态报告页面已激活,我得到了类似这样的信息(不必关心设置,这是压力测试下的测试服务器):
pool: foobar
process manager: dynamic
start time: 31/Jan/2012:08:18:45 +0000
start since: 23592
accepted conn: 3354
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 0
active processes: 10
total processes: 10
max active processes: 10
max children reached: 25
我找不到任何地方说明listen queue:
、max listen queue:
和listen queue len
指标是什么。有人能解释一下吗?
答案1
PHP-FPM 连接通过套接字(TCP 或基于文件)进行。因此,PHP-FPM 必须 '听' 在该套接字上,然后 '接受' 连接。
由于接受连接的速率是有限的,因此在高负载下,发起连接和接受连接之间可能会有延迟。处于该状态的连接处于“排队”状态。
监听队列长度:这定义了排队的最大连接数。一旦达到此限制,后续连接将被拒绝或忽略。随着连接的接受,队列长度将减少。
- 该值由每个池的 php-fpm 配置选项“listen.backlog”设置(默认值:-1=unlimited)。
- 由于正在使用套接字,该值也受到系统值“net.core.somaxconn”的限制(默认值:大多数 Linux 系统上的 128)。
鉴于上述情况,可以推断:
- 监听队列:是已发起但尚未接受的连接数
- 最大监听队列:是 php-fpm 运行时监听队列达到的最大值。