温馨提示×

JMeter在Ubuntu上如何进行并发测试

小樊
44
2025-11-28 22:53:34
栏目: 智能运维

在 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。
  • 分布式压测(多台执行机放大并发):
    • 准备:所有执行机安装相同版本的 JavaJMeter,并拷贝相同的 .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 配置。
  • 文件与路径:执行机与控制机的 .jmxCSV/JAR 等依赖必须路径一致,否则会报文件找不到或数据文件读取失败。
  • 内存与 GC:并发不足或波动大时,适当增加 HEAP;同时监控系统资源(CPU、内存、网络、磁盘 IO),避免测试机本身成为瓶颈。
  • 监听器开销:压测时关闭 View Results Tree 等重监听器,仅保留必要聚合与结果输出,减少资源占用与 I/O 压力。

0