直接用 apache 的 mod_status 模块可获取实时 qps,启用 extendedstatus 后访问 /server-status?auto 解析 reqpersec 字段,配合定时采集、滑动平均与 busy/idleworkers 状态分析,结合错误率和响应时间交叉验证,避免将 total accesses 误作 qps。

直接用 Apache 自带的 mod_status 模块就能获取实时 QPS,不需要额外部署复杂系统。关键在于启用扩展状态并定时采集 ReqPerSec 字段——它就是每秒请求数(QPS)的原始值。
启用 mod_status 并暴露 ReqPerSec
确保 Apache 配置中已加载该模块,并开启扩展状态:
- 确认
LoadModule status_module modules/mod_status.so已启用 - 在
<location></location>区块中设置ExtendedStatus On - 限制访问权限(如仅允许内网 IP),避免敏感信息泄露
重启 Apache 后,访问 http://your-server/server-status?auto 即可看到机器可读输出,其中一行类似:ReqPerSec: 42.67 —— 这就是当前瞬时 QPS。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
定时采集与简单告警
用 shell 脚本 + curl 每 10 秒抓一次数据,写入本地文件或推送至监控系统:
- 示例命令:
curl -s http://localhost/server-status?auto | grep "^ReqPerSec:" | cut -d' ' -f2 - 配合
awk计算滑动平均(如最近 5 次的均值),过滤毛刺 - 当连续 3 次 QPS 超过阈值(如 100),触发邮件或钉钉通知
结合连接状态判断吞吐质量
QPS 高不等于服务健康。需同步看 BusyWorkers 和 IdleWorkers:
- 若 QPS 上升但
BusyWorkers接近MaxRequestWorkers,说明并发处理能力已达上限 - 若 QPS 突降而
IdleWorkers大量堆积,可能是后端超时或网络中断 - 搭配
Scoreboard中R(读取请求)、W(发送响应)状态数,能定位卡在哪个阶段
避免常见误读
ReqPerSec 是瞬时速率,不是累计值;它只统计成功响应(2xx/3xx)的请求,不含 4xx/5xx 错误请求:
- 高 QPS + 高 5xx 错误率,说明吞吐虚假繁荣,实际服务质量差
- 日志中
access_log的%T(响应时间秒)和%D(微秒)字段,可交叉验证 QPS 是否伴随延迟恶化 - 不要把
Total Accesses除以运行时间当 QPS——它包含重试、健康检查等非业务请求,失真严重










