Ubuntu Tomcat如何进行性能测试
导读:Ubuntu 下 Tomcat 性能测试与监控实操指南 一 测试准备与关键指标 准备稳定版本:建议使用 Tomcat 9+、JDK 11+,并在测试机上安装 Apache JMeter 5.5+。为减少干扰,测试环境尽量与生产一致(硬件规...
Ubuntu 下 Tomcat 性能测试与监控实操指南
一 测试准备与关键指标
- 准备稳定版本:建议使用 Tomcat 9+、JDK 11+,并在测试机上安装 Apache JMeter 5.5+。为减少干扰,测试环境尽量与生产一致(硬件规格、网络、JDK/容器版本、应用版本)。
- 关键业务指标:吞吐量(req/s)、响应时间(平均/95/99分位)、错误率。
- 关键资源指标:Tomcat 线程池(当前/最大线程、繁忙线程)、JVM 堆与非堆内存、GC 次数/停顿、CPU/内存/磁盘 I/O/网络。
- 监控方式:开启 JMX 远程监控,结合 JConsole/VisualVM 观察 MBean;必要时补充系统级监控(如 sar/pidstat/ifstat)。
- 安全提示:压测与监控仅在非生产环境进行,避免对线上造成影响。
二 快速上手 两种常用工具与命令
- Apache JMeter(功能全面,适合复杂场景与报告)
- 安装:sudo apt-get install -y openjdk-11-jdk jmeter;GUI 设计测试计划,非 GUI 运行更稳定。
- 示例(非 GUI,直接对应用接口压测):
说明:线程数 100、持续时间 300s,结果写入 JTL 文件便于后续聚合分析。jmeter -n -t benchmark.jmx -Jthreads=100 -Jduration=300 -Jurl=http://localhost:8080/app/api -l results/result_100u.jtl
- ApacheBench(轻量快速,适合单接口基线)
- 安装:sudo apt-get install -y apache2-utils。
- 示例(GET):
ab -n 10000 -c 200 http://localhost:8080/ - 示例(POST JSON):
ab -n 1000 -c 100 -p data.json -T application/json http://localhost:8080/add - 关注输出中的 Requests per second、Time per request、Failed requests 等核心项。
三 启用 JMX 监控 Tomcat 与 JVM
- 方式一(推荐)在 $CATALINA_HOME/bin/setenv.sh 中追加(如文件不存在则新建):
重启 Tomcat 后用 JConsole 连接 localhost:1099 查看 MBean。export CATALINA_OPTS="$CATALINA_OPTS \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=1099 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname=127.0.0.1" - 方式二 直接在 catalina.sh 的 JAVA_OPTS 中追加相同参数。
- 安全建议(压测环境外):为 JMX 配置 SSL 与 用户名/密码,并限制来源 IP。
- 在 JConsole 中重点查看:
- MBeans → Catalina → GlobalRequestProcessor → http-nio-8080:观察 requestCount、errorCount、processingTime、maxTime(吞吐、错误、平均/最大响应时间)。
- 线程 与 内存 面板:观察线程数变化、堆/非堆使用与 GC 行为。
四 监控与结果分析要点
- 系统资源:使用 top/vmstat/pidstat/sar/ifstat 观察 CPU 利用率、内存占用、I/O 等待、网络吞吐,定位是否为系统层瓶颈。
- Tomcat 线程池:通过 JMX 的 GlobalRequestProcessor 与 ThreadPool MBean 观察 当前线程数、最大线程数、繁忙线程 与 请求排队,判断是否线程不足或连接堆积。
- JVM:在 JConsole/VisualVM 观察 堆内存曲线、GC 次数/停顿,若 Full GC 频繁或停顿过长,需优化 -Xms/-Xmx 与 GC 策略。
- 结果判读:
- 吞吐(req/s)随并发上升而提高,直至受限于 CPU/内存/网络/数据库;
- 95/99 分位响应时间 比平均值更能反映用户体验;
- 错误率升高通常伴随 线程池耗尽、连接超时、后端依赖异常;
- 多次迭代测试取稳定区间,避免冷启动影响。
五 自动化脚本与持续化压测
- 可用 Python/Bash 实现“环境检查 → 启动 JMeter → 采集 JMX/系统指标 → 生成报告”的全流程自动化。
- 示例 Bash 骨架(要点):
#!/usr/bin/env bash set -euo pipefail TOMCAT_URL="http://localhost:8080" TEST_DURATION=300 CONCURRENT_USERS=(50 100 200) RESULT_DIR="./results/$(date +%Y%m%d_%H%M%S)" mkdir -p "$RESULT_DIR" check_env() { if ! curl -s "$TOMCAT_URL/manager/status" | grep -q "OK"; then echo "Tomcat 未就绪"; exit 1 fi } run_load_test() { local users=$1 jmeter -n -t ./benchmark/template.jmx \ -Jthreads=$users -Jduration=$TEST_DURATION -Jurl=$TOMCAT_URL \ -l "$RESULT_DIR/jmeter_${ users} u.jtl" } collect_metrics() { local users=$1 # 伪采集示例:线程、会话、空闲内存(实际可用 JMXterm/jmxquery 等) echo "{ \"threads\":\"$(curl -s "$TOMCAT_URL/manager/status/all" | awk '/Max threads/{ print $4} ')} \"" \ > "$RESULT_DIR/metrics_${ users} u.json" } main() { check_env for u in "${ CONCURRENT_USERS[@]} "; do run_load_test "$u" collect_metrics "$u" done # 可调用 JMeter 报告生成或 Python 聚合脚本 } main - 建议将 JTL 结果、JMX 指标 JSON、系统监控 CSV 统一归档,使用 Python/pandas + matplotlib 生成图表,便于对比不同版本与配置的差异。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat如何进行性能测试
本文地址: https://pptw.com/jishu/771602.html
