CentOS Tomcat如何进行性能测试
小樊
44
2025-12-27 07:43:34
CentOS 上 Tomcat 性能测试实操指南
一 测试准备与基线
- 环境与一致性:准备与生产一致的 CentOS 版本、JDK、Tomcat 版本与应用包;避免其他业务干扰,必要时在隔离网络或专用压测环境执行。
- 监控就位:在压测前先打通 JMX 与系统监控,便于在压测过程中实时观测 CPU、内存、线程、GC、连接数 等关键指标。
- 监控方案(任选其一或组合):
- JMX + jconsole/VisualVM:本地或远程连接查看 堆内存、线程、类加载、MBeans 等。
- Prometheus + Grafana + JMX Exporter:以 JMX Exporter 暴露指标,Prometheus 拉取,Grafana 展示可视化面板。
- Tomcat Manager:快速查看应用状态与会话数(需配置用户权限)。
- 系统命令:top/htop、netstat、tail -f catalina.out 等用于临时排查与佐证。
- 工具安装(示例):
- JMeter:下载安装包,使用 GUI 或命令行运行测试计划。
- ab(Apache Bench):sudo yum install -y httpd-tools。
- wrk:建议从源码或 EPEL 安装,wrk 为轻量且高并发友好的 HTTP 基准工具。
- 基线场景:先做一次“空容器”与“简单 HelloWorld”的基线测试,记录 TPS、响应时间 P95/P99、错误率、CPU/内存/IO,后续优化以基线对照。
二 执行测试的工具与命令
- JMeter(推荐,场景化与结果分析强)
- 创建线程组(并发用户数、Ramp-Up、循环次数),添加 HTTP 请求(协议、端口、路径、Header、Body),可配 CSV Data Set 做参数化,使用 聚合报告/图形结果 查看 Throughput、Average/Median/P95/P99、Error%。
- 命令行执行(便于 CI/CD 与无头环境):
- jmeter -n -t tomcat_test.jmx -l result.jtl -e -o report/
- ab(快速 HTTP 基准,GET/POST 简单场景)
- 安装:sudo yum install -y httpd-tools
- GET:ab -n 10000 -c 200 http://:8080/hello
- POST:ab -n 1000 -c 100 -p data.json -T application/json http://:8080/api
- 关注:Requests per second、Time per request、Transfer rate、Failed requests。
- wrk(高并发、长时压测)
- 示例:wrk -t12 -c400 -d60s http://:8080/
- 关注:Requests/sec、Latency(延迟分布)、Socket errors。
- 测试设计要点:
- 采用“梯度并发”(如 50→100→200→500 并发)与“固定时长”两种策略;
- 每个场景至少 3 次取中位数,避免偶发波动;
- 区分 静态资源 与 动态接口/JSP 场景,必要时单独压测数据库或外部依赖。
三 监控与结果判读
- 关键指标与含义
- 吞吐率(Requests per second / TPS):单位时间处理请求数,越高越好;
- 响应时间(Average / P95 / P99):反映尾延迟与用户体验;
- 错误率(Failed requests / Error%):>0 需定位(连接超时、线程耗尽、后端异常等);
- 资源(CPU、内存、GC、线程、网络 IO):判断是否资源瓶颈或配置不足。
- JMX 与可视化
- 通过 jconsole/VisualVM 观察 线程池活跃数、堆内存曲线、GC 次数/时间;
- 使用 JMX Exporter + Prometheus + Grafana 搭建面板,持续记录压测过程中的指标变化,便于对比优化前后差异。
- 系统层排查
- top/htop -H -p 看线程级 CPU;
- netstat -tulpen | grep 8080 看连接状态;
- tail -f logs/catalina.out 与 access_log 定位错误与慢请求。
四 常见瓶颈与优化验证
- 线程池与连接器(server.xml)
- 显式配置 Executor 与 NIO/NIO2,提升并发与 I/O 能力:
- JVM 调优(catalina.sh 的 JAVA_OPTS)
- 示例(按内存与 GC 策略调整):
- JAVA_OPTS=“-server -Xms16G -Xmx16G -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat/”
- 应用与容器层
- 启用 GZIP 压缩、优化 静态资源 缓存;
- 减少 JAR 扫描 开销(catalina.properties 中合理配置 jarsToSkip);
- 数据库连接池(如 HikariCP)与 SQL 优化;必要时启用 HTTP/2。
- 操作系统与网络
- 适度优化内核网络参数(如 net.core.somaxconn、tcp_tw_reuse、fs.file-max);
- 视环境考虑 禁用透明大页(THP) 以降低抖动;
- 防火墙与安全组仅放通压测所需端口。
- 验证方法
- 每次只变更 一个变量(线程数/协议/GC/连接池/压缩等),重复相同压测脚本与梯度,观察 TPS、P95/P99、错误率、GC 时间 的变化,确认优化有效性。
五 一键压测与监控示例脚本
- 场景:对 /hello 进行 60 秒、400 并发 的 wrk 压测,同时记录系统资源与 GC 日志。
- 步骤:
- 启动 Tomcat(确保应用已部署并能正常访问)。
- 运行监控(另开终端):
- top -b -d 1 -n 70 | grep java > top.log &
- jstat -gc 1s 60 > jstat_gc.log &
- 执行压测:
- wrk -t12 -c400 -d60s http://:8080/hello
- 结束后查看:
- wrk 报告中的 Requests/sec、Latency;
- top.log 与 jstat_gc.log 中的 CPU、GC 变化;
- 结合 JMX/Prometheus/Grafana 曲线定位瓶颈。
- 安全提示:
- 远程 JMX 在生产环境务必开启 认证与 SSL,避免使用文中示例的关闭认证配置;
- 压测请避开业务高峰,避免对线上造成影响。