温馨提示×

Ubuntu JMeter如何进行压力测试

小樊
36
2025-12-16 16:02:34
栏目: 智能运维

Ubuntu 上使用 JMeter 进行压力测试

一 环境准备与安装

  • 安装 Java 11(JMeter 5.x 建议使用 JDK 8/11):sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
  • 下载并解压 Apache JMeter(不要使用 apt 安装旧版):
    wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.tgz
    tar -xzf apache-jmeter-5.6.3.tgz && sudo mv apache-jmeter-5.6.3 /opt/jmeter
  • 配置环境变量(写入 ~/.bashrc 或 /etc/profile):
    export JMETER_HOME=/opt/jmeter
    export PATH=$JMETER_HOME/bin:$PATH
    生效:source ~/.bashrc
  • 验证安装:jmeter -v(应输出版本号,如 5.6.3)。

二 编写测试计划

  • 启动 GUI 设计器:jmeter(仅用于调试与脚本编写,正式压测请用非 GUI)。
  • 新建测试计划 → 添加线程组(Thread Group):设置 Number of Threads(并发数)Ramp-Up Period(秒)Loop Count(循环次数)
  • 在线程组下添加 HTTP 请求(HTTP Request):配置协议、服务器名称/IP、端口、路径、请求方法、参数或 Body Data(JSON 等)。
  • 添加 HTTP Header Manager(如 Content-Type: application/json)。
  • 添加 断言(Response Assertion / JSON Assertion)校验业务正确性(如状态码 200 或 JSON 字段)。
  • 添加监听器:
    • View Results Tree(仅调试,正式压测关闭,避免内存占用);
    • Summary ReportAggregate Report 用于统计。
  • 保存为 .jmx 脚本,后续用命令行执行。

三 执行压测与结果查看

  • 非 GUI 执行(推荐):
    jmeter -n -t test_plan.jmx -l result.jtl -e -o report/
    说明:-n 非 GUI;-t 脚本;-l 结果文件;-e 生成 HTML 报告;-o 报告输出目录(需为空)。
  • 多次运行取平均(示例:并发从 1001000,步长 100,每档 10 次):
    for threadCount in $(seq 100 100 1000); do
    for i in {1…10}; do
    ./jmeter.sh -n -t test.jmx -J threadNum=$threadCount -l testcsv/test$threadCount-$i.csv -e -o testReport/test$threadCount-$i/;
    sleep 1;
    done;
    done
  • 结果分析:
    • HTML 报告位于 report/,可查看 Throughput(吞吐量,/s)Average(平均响应时间)Error % 等;
    • 若数据量大,可直接读取报告目录下的 statistics.json,取 Total 对象的 throughput 字段用于对比。

四 分布式压测与常见问题

  • 何时使用分布式:单机并发过高导致 JMeter 卡死/内存溢出 时,使用分布式将负载分发到多台执行机。
  • 架构与前提:
    • 控制机(Client)分发脚本与汇总结果;执行机(Agents/Slaves)实际发压;
    • 所有机器安装相同版本的 JavaJMeter
    • 网络互通,放通 RMI 1099 端口及高端口范围(如 4000–5000),或临时关闭防火墙;
    • 控制机与执行机建议都设置:server.rmi.ssl.disable=true(禁用 SSL,避免连接问题)。
  • 执行机配置:
    • 编辑 $JMETER_HOME/bin/jmeter.properties:server.rmi.ssl.disable=true;必要时设置 java.rmi.server.hostname=执行机IP
    • 启动:./jmeter-server -Djava.rmi.server.hostname=执行机IP(后台:nohup … > jmeter-server.log 2>&1 &)。
  • 控制机配置与运行:
    • 编辑 $JMETER_HOME/bin/jmeter.properties:remote_hosts=192.168.1.101:1099,192.168.1.102:1099
    • 分发脚本及依赖(如 CSV 数据文件、JAR)到所有执行机的相同路径
    • 命令行运行:./jmeter -n -t plan.jmx -r -l result.jtl(-r 远程启动所有执行机)。
  • 常见问题排查:
    • 无法连接执行机:检查 1099 端口连通性、hostname 解析、以及 server.rmi.ssl.disable 是否一致;
    • 执行机日志出现 “Created remote object …” 即表示监听成功;
    • 调整执行机堆内存(编辑 jmeter 脚本中的 HEAP=“-Xms2g -Xmx4g”)。

0