在 Ubuntu 上使用 JMeter 进行并发测试
一 环境准备
- 安装 Java(JMeter 5.x 建议使用 JDK 8 或 11):sudo apt update && sudo apt install -y openjdk-11-jdk
- 下载并解压 Apache JMeter(以 5.5 为例):
- wget https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.5.tgz
- tar xvf apache-jmeter-5.5.tgz && cd apache-jmeter-5.5/bin
- 验证:./jmeter.sh -v 应输出版本号;JMeter 为 Java 工具,需先安装 JDK 才能运行。
二 编写测试计划
- 在 GUI 中创建测试计划:
- 添加线程组 Thread Group:设置并发用户数(Number of Threads/users)、Ramp-Up Period(秒)、循环次数或持续时间(Duration/Iterations)。
- 添加 HTTP 请求 Sampler:配置协议、服务器名称/IP、端口、路径、方法、参数或 Body;如需请求头,添加 HTTP Header Manager。
- 为结果查看添加 Listener:如 View Results Tree(调试用,正式压测不建议开启),聚合报告可用 Summary Report/聚合报告。
- 示例参数:线程数 100、Ramp-Up 10 秒、持续 180 秒,用于观察从启动到稳定并发的过程与稳定性。
三 非 GUI 模式运行与生成报告
- 正式压测在 Linux 上建议使用非 GUI 模式,降低资源占用、提升并发能力:
- 执行命令:jmeter -n -t testplan.jmx -l result.jtl
- 常用选项:
- -n 非 GUI 模式
- -t 指定 JMX 脚本
- -l 保存结果到 JTL
- -e -o 生成 HTML 报告目录(需与 -l 不同目录)
- 示例:jmeter -n -t testplan.jmx -l result.jtl -e -o report
- 报告查看:打开 report/index.html 可查看 Throughput、Average、95% Line、Error % 等关键指标。
四 提升并发与分布式压测
- 单机并发优化要点:
- 使用非 GUI 模式运行,避免 GUI 额外开销。
- 调整 JMeter 堆内存(编辑 bin/jmeter 或 jmeter 启动脚本中的 HEAP):例如 HEAP=“-Xms2g -Xmx4g”,根据机器内存与测试规模设置,避免频繁 GC 或 OOM。
- 分布式压测(多台执行机放大并发):
- 准备:所有执行机安装相同版本的 Java 与 JMeter,并拷贝相同的 .jmx 与依赖文件(如 CSV 数据、JAR)到相同路径。
- 执行机配置:在 jmeter.properties 中设置 server.rmi.ssl.disable=true,必要时设置 java.rmi.server.hostname 为本机可访问 IP;启动执行机:./jmeter-server。
- 控制机配置:在 jmeter.properties 的 remote_hosts 填入执行机 IP:端口(默认 1099);运行时使用:jmeter -n -t testplan.jmx -r -l result.jtl(-r 表示远程启动所有执行机)。
- 网络与连通性:确保控制机与执行机之间 1099 端口及 RMI 通信可达,防火墙放行相关端口;必要时统一主机名解析。
五 常见问题与排查
- 端口与连通性:分布式压测需确保 1099 端口开放、hostname 正确解析;控制机无法连接执行机时优先排查防火墙与 RMI 配置。
- 文件与路径:执行机与控制机的 .jmx 与 CSV/JAR 等依赖必须路径一致,否则会报文件找不到或数据文件读取失败。
- 内存与 GC:并发不足或波动大时,适当增加 HEAP;同时监控系统资源(CPU、内存、网络、磁盘 IO),避免测试机本身成为瓶颈。
- 监听器开销:压测时关闭 View Results Tree 等重监听器,仅保留必要聚合与结果输出,减少资源占用与 I/O 压力。