CentOS 上搭建 Apache 性能监控与压测的实用方案
一 实时监控工具
- 使用 apachetop 观察 URL、来源、状态码、每秒请求数等,安装与运行:sudo yum install -y apachetop;apachetop(默认读取 /var/log/httpd/access_log)。常用交互:按 d 切换视图(URL/来源/主机)、按 s 排序、按 q 退出。适合快速定位突发热点接口与异常返回码。
- 启用 mod_status 获取进程/连接级实时指标:在配置中加入
<Location “/server-status”> SetHandler server-status Require host 127.0.0.1
并在主配置中打开 ExtendedStatus On,重启后在浏览器访问 http://your-server/server-status 或使用命令行工具(如 lynx/curl)查看。用于观察当前连接、空闲/忙碌进程、总请求数等关键指标。
- 系统资源配合监控:使用 top/htop/vmstat 观察 CPU、内存、I/O 与负载,便于判断瓶颈是在 Apache 还是底层资源。
二 日志分析与可视化
- 使用 GoAccess 生成 HTML 交互报告:sudo yum install -y goaccess;goaccess /var/log/httpd/access_log -o report.html --log-format=COMBINED。报告涵盖 流量、URI、访客、浏览器、HTTP 状态码、响应时间 等,便于定位慢 URL 与错误集中点。
- 使用 logwatch 做日/周报:sudo yum install -y logwatch;logwatch --output html --range yesterday。用于例行汇总 访问量、错误趋势、UA 分布 等。
- 快速命令行分析示例:统计每分钟请求数
awk ‘{print $4}’ /var/log/httpd/access_log | cut -d: -f2 | cut -d. -f1 | sort | uniq -c | sort -nr
用于排查短时突发流量与峰值时段。
三 负载与压力测试
- ApacheBench(ab):sudo yum install -y httpd-tools;示例:ab -n 10000 -c 100 http://your-server-ip/。用于评估 并发能力、RPS、95% 延迟 等,注意避免对生产造成影响。
- http_load:模拟多并发与固定时长场景,示例:http_load -parallel 10 -seconds 10 urls.txt。
- httperf:更贴近真实会话与连接行为,示例:httperf --hog --server your-server-ip --uri=/ --num-conns 10000 --wsess 10,10,0.1。
- 建议测试流程:准备接近生产的测试环境 → 先基线测试(低并发) → 逐步加压 → 同时监控系统资源与 mod_status 指标 → 回归验证与瓶颈定位。
四 关键指标与阈值建议
- 关注 RPS(每秒请求数)、并发连接数、CPU/内存占用、I/O 等待、5xx/4xx 错误率、P95/P99 响应时间、慢请求占比。
- 使用 mod_status 观察 Busy/Idle workers 比例与 Total Accesses,当 Busy 长期接近 MaxRequestWorkers(或旧版的 MaxClients)且 CPU/IO 高企,多为并发或后端瓶颈。
- 使用 apachetop/GoAccess 持续跟踪 Top URLs、Top 来源、返回码分布,快速识别异常流量与错误集中点。
- 结合 top/htop/vmstat 判断瓶颈归属:CPU 饱和常见于计算/压缩/SSL;I/O 高常见于日志/静态资源磁盘或后端慢查询;内存紧张会导致频繁换页与 worker 重建。
五 基于监控结果的调优方向
- 选择合适的 MPM(Prefork/Worker/Event):Event MPM(Apache 2.4+) 在高并发与长连接(KeepAlive)场景更高效;若使用不线程安全模块,优先 Prefork。
- 调整并发相关参数(示例为常见范围,需结合实例内存与压测校准):
- StartServers:启动时进程数(如 2–5)
- MinSpareServers / MaxSpareServers:空闲进程缓冲(如 5–10 / 10–20)
- MaxRequestWorkers(旧版 MaxClients):最大并发处理数(依据内存与单进程占用测算)
- MaxConnectionsPerChild(旧版 MaxRequestsPerChild):进程生命周期内处理请求上限,用于回收内存碎片(如 1000–10000)
- 借助 Apache2Buddy 快速评估内存与 MaxRequestWorkers 的匹配度:curl -L http://apache2buddy.pl/ | perl;根据建议微调并回归压测。
- 打开 mod_status 的 ExtendedStatus 并结合 apachetop/GoAccess 持续验证调优成效,避免“拍脑袋”参数变更。