应汇总所有httpd进程资源:用ps+awk实时计算CPU总和与内存RSS总和;用htop/top排序定位高耗子进程;启用mod_status获取各工作进程CPULoad等状态;结合vmstat、iostat等系统工具交叉验证瓶颈。

监控 Apache 动态进程的 CPU 和内存使用率,关键在于区分“单个 httpd 进程”与“整个 Apache 工作集”,并结合实时性、聚合统计和持续观察三方面来操作。CentOS 或 RHEL 系统中,Apache 默认以 prefork 或 worker 模式运行多个子进程,因此不能只看一个 PID,而要汇总所有相关进程的资源消耗。
用 ps + awk 实时汇总所有 httpd 进程资源
这是最轻量、无需安装额外软件的方法,适合快速排查或嵌入脚本:
- CPU 使用率总和(百分比):ps aux | grep -v grep | grep httpd | awk '{sum += $3} END {printf "%.1f%%\n", sum}'
- RSS 内存总和(单位 KB):ps aux | grep -v grep | grep httpd | awk '{sum += $6} END {printf "%d KB\n", sum}'
- 平均每个子进程 RSS 内存:ps aux | grep -v grep | grep httpd | awk '{sum += $6; n++} END {if(n>0) printf "%.0f KB\n", sum/n}'
建议搭配 watch 每 5 秒刷新一次:watch -n5 'ps aux | grep -v grep | grep httpd | awk "{sum+=$3} END {printf \"CPU: %.1f%%\nMem: %d KB\", sum, sum2}"'(需在命令中补全 求和逻辑)
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
用 top/htop 直观定位高耗资源子进程
交互式工具更适合人工诊断,能立即识别异常子进程:
- 运行 htop(若未安装:sudo yum install htop),按 F4 输入 httpd 过滤,再按 F6 → PERCENT_CPU 或 PERCENT_MEM 排序
- 在 top 中按 Shift+P(CPU)或 Shift+M(内存)排序,关注 CMD 列为 httpd 的行
- 注意:prefork 模式下各子进程独立占用内存;worker 模式因线程共享,RSS 值可能偏低但 CPU 波动更明显
启用 mod_status 获取进程级状态摘要
Apache 自带模块可暴露每个工作进程的状态,包括当前 CPU 时间、处理请求数、连接状态等(非实时 CPU% 数值,但具上下文意义):
- 确认已启用:LoadModule status_module modules/mod_status.so,并在配置中添加:
- <Location "/server-status">
SetHandler server-status
Require local
</Location>
ExtendedStatus On - 重启后访问 http://localhost/server-status?auto,返回文本格式数据,其中每行代表一个子进程,含字段:CPULoad(累计 CPU 时间,单位秒)、Req(已处理请求数)、Conn(当前连接数)
- 配合脚本解析该接口(如用 curl + awk),可提取活跃进程的 CPU 累计值变化趋势
用系统级工具辅助判断是否为 Apache 导致瓶颈
单独看 httpd 进程不够,需结合全局指标交叉验证:
- vmstat 1 5:观察 us(用户态 CPU)是否持续 >70%,同时 si/so 是否非零(说明内存不足触发 swap)
- iostat -xz 1:若 %util ≈ 100% 且 await 显著升高,可能是日志写入或静态文件读取拖慢整体响应,间接推高 httpd 子进程等待时间
- cat /proc/loadavg:若 1 分钟负载值远超 CPU 核心数(如 8 核服务器 load > 12),且 top 中 httpd 占比高,基本可锁定为 Apache 负载过重

















