温馨提示×

JMeter在CentOS上的多线程测试怎么做

小樊
37
2025-12-23 17:04:39
栏目: 智能运维

在CentOS上使用JMeter进行多线程压测的完整步骤

一 环境准备与安装

  • 安装 Java 8(JMeter 5.x 要求 Java 8+):
    • 执行:sudo yum install -y java-1.8.0-openjdk-devel
    • 配置环境变量:/etc/profile 中添加
      • export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
      • export PATH=$JAVA_HOME/bin:$PATH
    • 使配置生效:source /etc/profile 并验证:java -version
  • 安装 Apache JMeter(以 5.4.3 为例):
    • 下载并解压:tar -zxvf apache-jmeter-5.4.3.tgz -C /usr/local/
    • 配置环境变量:/etc/profile 中添加
      • export JMETER_HOME=/usr/local/apache-jmeter-5.4.3
      • export PATH=$JMETER_HOME/bin:$PATH
    • 使配置生效:source /etc/profile 并验证:jmeter -v
  • 建议在 非GUI模式 执行压测(资源占用更低、稳定性更好)。

二 编写测试计划

  • 在 JMeter GUI 中创建测试计划,添加线程组:
    • 右键测试计划 → Add → Threads (Users) → Thread Group
    • 关键参数:
      • Number of Threads (users):并发用户数(每个线程≈1个虚拟用户)
      • Ramp-Up Period (seconds):在多少秒内逐步启动全部线程(如 100 线程、 10 秒,则每秒启动约 10 个线程)
      • Loop Count:每个线程循环次数;勾选 Forever 可持续执行
      • 需要按固定时长运行时,勾选 Scheduler,设置 Duration(持续时间)
  • 添加取样器(如 HTTP Request),填写协议、服务器名/IP、端口、方法、路径、参数等;必要时添加 HTTP Header Manager 设置 Content-Type 等请求头。
  • 添加监听器用于结果分析:View Results Tree(调试用)、Aggregate Report(聚合指标如 Average/Median/90%/95%/99%/Throughput/Error%)。

三 命令行执行与参数化并发

  • 基本执行(非GUI):
    • 命令:./jmeter -n -t /path/to/test_plan.jmx -l /path/to/results.jtl
    • 说明:-n 非GUI、-t 指定脚本、-l 输出 JTL 结果文件
  • 生成 HTML 报告(压测结束后):
    • 方式一(同跑同出):./jmeter -n -t test.jmx -l results.jtl -e -o /path/to/report
    • 方式二(事后生成):./jmeter -g results.jtl -o /path/to/report
    • 报告目录中的 index.html 可用浏览器查看
  • 命令行参数化线程数与循环次数(无需改脚本):
    • 在测试计划中,将线程数与循环次数用 JMeter 函数参数化:
      • 线程数:${__P(threads,1)}
      • 循环次数:${__P(cycles,1)}
    • 运行时通过 -J 传入:jmeter -n -t test.jmx -Jthreads=200 -Jcycles=100 -l log.jtl
    • 说明:__P(property,default) 用于读取命令行 -J 传入的属性值,便于基线回归与多场景批量执行。

四 常见场景配置要点

  • 瞬时并发(集合点):
    • 使用 Synchronizing Timer(同步定时器)
    • 设置 Number of Simultaneous Users to Group by(每次集合的用户数)与 Timeout in milliseconds(超时时间)
    • 典型用法:线程组 Ramp-Up > 0,但通过同步定时器在指定时刻“汇合”后一起发起请求,模拟“同一时刻 N 个用户并发”
  • 指定目标 TPS(吞吐控制):
    • 添加 Constant Throughput Timer
    • 设置 Target Throughput(目标 TPS,按每分钟/秒填写)
    • 选择 Calculate Throughput based on:常用 this thread only(按线程自我调节以达到目标吞吐)
  • 持续压测:
    • 线程组 Loop Count = Forever,勾选 Scheduler,设置 Duration(如 600 秒=10 分钟)
  • 多接口按比例并发:
    • 为每个接口创建 吞吐量控制器(Throughput Controller),设置百分比(合计 100%),并在其下放置对应 HTTP Request

五 性能与稳定性调优

  • JMeter 自身(压力机)调优:
    • 调整 堆内存(避免超过物理内存的 2/3):编辑 bin/jmeterbin/jmeter.sh,设置 JVM_ARGS="-Xms2G -Xmx8G -XX:MaxMetaspaceSize=512m"(按机器内存合理设置)
    • 适当增大 HTTP 客户端空闲超时(如 httpclient4.idletimeout=10000 ms),减少连接异常
  • 操作系统与网络调优(压测前执行,谨慎评估线上环境):
    • 文件句柄与进程数:
      • 临时:ulimit -n 102400
      • 永久:/etc/security/limits.conf 增加
        • * soft nofile 65536* hard nofile 65536
        • * soft nproc 65565* hard nproc 65565
    • TCP 与端口:
      • /etc/sysctl.conf 增加
        • net.ipv4.tcp_tw_reuse = 1
        • net.ipv4.tcp_fin_timeout = 30
        • net.ipv4.ip_local_port_range = 1024 65000
      • 执行:sysctl -p 生效
  • 被测服务与中间件(如 Nginx)也需同步调优(如 worker_connectionskeepalive_timeout)以避免成为瓶颈。

0