要监控 apache 各 worker 性能,必须启用 extendedstatus on 并安全访问 /server-status?auto 或 html 页面,以获取每个 worker 的实时状态(如 r/w/k)、耗时、客户端 ip 等细粒度指标,同时严格限制访问 ip 以防敏感信息泄露。

要通过 Apache 状态页面监控各个 Worker 的性能,核心是启用 ExtendedStatus On 并安全访问 /server-status?auto 或 HTML 页面,从而获取每个 worker 进程/线程的实时运行阶段、耗时、客户端 IP 等细粒度信息。
确保 ExtendedStatus 已开启
ExtendedStatus 是查看单个 Worker 状态的前提。它默认关闭,因为会带来轻微 CPU 开销:
- 编辑 Apache 主配置(如
/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf),在<ifmodule mod_status.c></ifmodule>块内添加或取消注释:ExtendedStatus On - 仅在排障、压测分析或短期深度巡检时开启;生产环境长期监控建议保持关闭,靠
BusyWorkers/IdleWorkers等聚合指标 + 日志 + 系统指标互补 - 修改后执行
sudo apache2ctl configtest(Debian/Ubuntu)或sudo httpd -t(RHEL/CentOS),再重启服务
访问并解析 Worker 级状态数据
开启 ExtendedStatus 后,两种方式可查看 Worker 细节:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
HTML 页面(人工快速定位):访问
http://your-server/server-status,滚动到底部“Current Scoreboard”区域。每行代表一个 worker,字符表示当前状态:
–R:正在读取请求头
–W:正在发送响应
–K:处于 Keep-Alive 等待中
–_:空闲等待新连接
–S:正在处理 SSL 握手
–D:正在 DNS 查询
–C:正在关闭连接 -
?auto 接口(机器可读,适合脚本/监控):请求
curl -s "http://localhost/server-status?auto",输出中会出现ScoreBoard字段(如ScoreBoard: _______WWKKK___...),同时每行 worker 附带:
–SS:上一次请求间隔(秒)
–Req:当前请求已处理耗时(毫秒)
–VHost:虚拟主机名
–Request:当前处理的 URL 路径(若可见)
–Client:客户端 IP(需日志格式含 %a 才稳定显示)
识别异常 Worker 的典型模式
结合状态字符与数值字段,可快速发现瓶颈:
- 大量
R状态 + 高SS:客户端网络慢或恶意慢速攻击(如 Slowloris),请求迟迟发不完 - 持续
W状态 + 高Req:后端响应慢(PHP 执行卡顿、数据库查询阻塞、上游服务超时) - 大量
K状态堆积:Keep-Alive 时间过长或客户端复用连接不积极,导致 worker 被占住无法服务新请求 - 出现多个
D:DNS 解析频繁或失败,检查是否用了未缓存的域名(如日志中含动态域名解析) - 同一 Client IP 出现多个活跃 worker:可能是爬虫、扫描器或未节流的客户端
安全访问与生产注意事项
Worker 级数据含客户端 IP 和请求路径,敏感性高,必须严格控制访问:
- 禁止使用
Require all granted或Allow from all(Apache 2.2 语法已废弃且静默拒绝) - 只允许运维网段或监控服务器 IP,例如:
<location><br> SetHandler server-status<br> Require ip 10.10.20.0/24<br> Require ip 172.16.0.5<br></location>
- 若经 Nginx 或 WAF 代理,
X-Forwarded-For不可信,应以真实源 IP 段为准,必要时配合防火墙策略 - 避免在容器或 IPv6 环境中仅配
Require local,它可能不匹配实际访问地址









