【JMeter】使用内网负载机(Linux)执行JMeter性能测试

本文详细介绍了如何在Linux内网环境中使用JMeter进行性能测试,包括准备SSH工具、Java和JMeter安装、修改host文件、配置运行脚本等步骤,以解决公网测试中的带宽瓶颈问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【JMeter】使用内网负载机(Linux)执行JMeter性能测试

一、背景

​ 在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试,一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢?

  1. 遇到公网环境下性能测试达到了带宽瓶颈。那么这时,我们就需要考虑在内网环境负载机下来执行我们的性能测试以达到屏蔽带宽影响的目的。

  2. 系统对高并发做了防护,例如ddos防护

  3. 测试的并发过高导致负载机先达到瓶颈

    本节我们介绍在内网负载机下执行JMeter性能测试。

二、准备

我们需要准备一下我们接下来需要用的东西:

  • ssh连接工具(例如:Xshell、Git Bash,在这里我们使用Git Bash)

  • apache-jmeter-5.5或以上(JMeter版本过低或java版本过高会导致java版本过高的报错提示)

  • 性能测试脚本

    • 脚本如下:

      image-20230907134702037

三、假设

在这里我们先做出一些假设:

  1. 被测网站为https://www.baidu.com。(我们一般在测试时测试的域名为http而非https)
  2. 负载机处于baidu内网环境中
  3. https://www.baidu.com 在内网中对应的内网ip为10.5.16.8
  4. 文章中负载机已安装配置环境,在本文中我们假设未安装任何环境

四、操作步骤

1、连接负载机

首先我们在脚本及jmeter所在文件夹下右键打开Git Bash

image-20230907134804580

连接负载机

ssh root@192.168.2.45
# root为登录的用户,@后为访问负载机ip地址

回车出现

root@192.168.2.45’s password:

我们输入密码后回车即可,登录成功

image-20230907135403211

2、检查环境

首先检查java环境

java --version

出现类似以下内容表示环境中存在java

image-20230907135800745

检查jmeter环境

jmeter --version

出现类似以下内容表示环境中存在jmeter

image-20230907135914640

查看Linux内存

free -h

image-20230907140906154

这里我们可以发现我们内存为1.6GB

查看LinuxCPU信息

cat /proc/cpuinfo

image-20230907141037520

这里我们看最后一个processor序号为1,故CPU为2核

查看Linux系统架构

uname -a

image-20230907141241498

这里可以知道系统架构为x86_64

3、测试准备

​ 在上文中我们说到,假设负载机未安装任何环境。这里我们分别介绍两种方式进行安装。

(1)Java安装(链接下载)

首先我们打开Java官网(其他下载地址也可)https://www.oracle.com/java/technologies/downloads/,选择jdk17(这里我们用jdk17进行演示)

image-20230907140654411

这里我们复制x64 Compressed Archive(具体下载的包取决于之前查询的CPU架构来决定)后的链接:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

创建java目录

mkdir ~/myTest
mkdir ~/myTest/java
cd ~/myTest/java

使用wget命令下载,等待下载完成

wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

image-20230907163110910

PS:该方法需要确保负载机可以连通外网使用一下命令检查

ping www.baidu.com	

image-20230907142308390

下载完成后查看

image-20230907163130235

解压

tar -zxvf jdk-17_linux-x64_bin.tar.gz
(2)JMeter安装(文件传输)

​ 向负载机传输文件我们可以通过ftp服务器传输。但是在这里我们用了Git Bash,在这里我们使用更加简便的scp来进行传输。

退回上一层,创建jmeter目录

cd ../
mkdir jmeter
cd jmeter

再次在放置脚本及jmeter所在文件夹下右键再次打开一个Git Bash

image-20230907143054434

输入命令

scp ./apache-jmeter-5.4.1.zip root@192.168.2.45:~/myTest/jmeter

输入密码后上传

image-20230907163256816

上传后关闭该窗口,回到之前的bash窗口检查是否上传成功

image-20230907163325128

解压

unzip apache-jmeter-5.4.1.zip

到了这里我们就基本可以开始操作脚本了,但是大家可能会好奇,环境变量怎么没有配置呢?

​ 并非是我们不配置环境变量,而是因为在测试中,我们一般不在客户的环境中配置永久环境变量,我们一般采用临时环境变量。这个我们在后面会说如何去配置

那么为什么要用临时环境变量呢?

​ 临时环境变量是指仅在当前系统会话有效的环境变量,该环境变量不会被写入系统的环境变量文件,也不会被永久保存。临时环境变量会在关闭本次会话后自动清除,不会影响下一次系统登录。同时也不会影响用户原有服务的环境变量。

在这里我们还需要进行一步编辑,需要修改我们的jmeter.sh文件或jmeter文件,这里我们修改jmeter.sh文件。

进入bin目录

cd bin
ls

image-20230907163506929

修改jmeter.sh

在这里有几个问题需要解释一下

为什么需要修改这个配置?

​ 在大并发的测试中,我们需要的大量的内存来执行压力测试,而JMeter在默认情况下的内存分配非常低,我们需要自己把该项配置的最大堆修改成合适的值

那么我们应该修改成多少合适呢?

​ 根据负载机的内存来决定该项的值为多少。在前面我们查询了内存为1.6GB,所以我们设置成1GB。一般建议设置为内存的80%。例如一台8GB的负载机,我们可以设置为6GB。

vim jmeter.sh

找到JVM-ARGS

image-20230907153852242

复制该行,去除注释,将512m修改为合适的大小

image-20230907154044385

4、调试脚本

回到我们上面的脚本截图

既然我们是在内网环境下运行,那么我们应该将URL改为内网ip访问才会达到理想效果。否则同样需要走公网进行访问。那么我们需要怎么解决呢?

方法一:

​ 我们可以直接将域名改为IP。但是该方法不推荐

方法二:

​ 修改负载机的host文件。推荐

为什么我们不推荐方法一呢?

​ 如果使用的是方法一,我们就无法本机上进行调试。而使用方法二我们不仅可以进行本机调试,而且在负载机上也走的是内网而不是公网。

image-20230907134702037

5、修改host

我们先修改hosts文件

vim /etc/hosts

输入i插入host信息,修改后按esc后输入:x

image-20230907145723555

6、配置运行脚本

新建一个文件夹放置脚本

img

同样使用scp将脚本拷贝进文件夹

scp ./内网测试.jmx root@192.168.2.45:~/myTest/jmeterTest

新建run.sh文件(也可以选择在本机新建好再传入负载机)

touch run.sh
vim run.sh

run.sh脚本如下

export JAVA_HOME=~/myTest/java/jdk-17.0.8 # jdk所在目录
export JMETER_HOME=~/myTest/jmeter # jmeter所在目录

export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATH # jdk和jmeter的bin目录

java --version # 检查java是否配置成功
jmeter --version # 检查jmeter是否配置成功

配置完成后保存,执行run.sh

bash run.sh

img

环境生效

再次编辑run.sh

export JAVA_HOME=~/myTest/java/jdk-17.0.8 # jdk所在目录
export JMETER_HOME=~/myTest/jmeter # jmeter所在目录

export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATH # jdk和jmeter的bin目录

jmeter -n -t 内网测试.jmx -l 内网测试.jtl # 运行脚本
# jmeter -g 内网测试.jtl -o 内网测试 # 如果并发过大建议生成HTML报告后scp到本地机

# java --version # 检查java是否配置成功
# jmeter --version # 检查jmeter是否配置成功

运行完成后

img

我们可以再次使用scp命令将生成的jtll文件传回本地机后生成html报告,但是不推荐

为什么不推荐直接将脚本复制到本地机呢?

​ 对于高并发的场景,生成的jtl文件会非常的庞大,所以我们一般建议将其生成为HTML报告,将HTML报告复制到本地机。如确实有必要收集jtl文件或者文件较小,可以采取直接将jtl文件复制到本机再生成HTML报告的方法

scp root@192.168.2.45:~/myTest/jmeterTest/内网测试.jtl ./

img

img

如果需要再次生成html报告,将运行脚本注释,取消生成html报告的注释。再次bash run.sh即可

<think>好的,我现在需要回答用户关于如何使用JMeter关联多台测试机进行24小时5万次下载测试的问题。首先,我得理解用户的需求:他们想要模拟高并发下载,持续24小时,达到5万次下载量。可能需要分布式测试,也就是使用多台机器协同工作,以产生足够的负载。 首先,我应该考虑JMeter的分布式测试功能。JMeter的主从模式允许一台主控机控制多个从机,共同执行测试计划。这样可以利用多台机器的资源,增加并发用户数。 接下来,需要确认用户是否了解分布式测试的基本设置。可能需要解释如何配置主控机和从机,比如修改JMeter属性文件,设置远程主机列表,以及确保所有机器在同一个子网中,避免防火墙阻挡通信端口。 然后,计算要达到5万次下载在24小时内的请求频率。假设测试持续24小时不间断,总下载次数是5万,那么平均每秒的请求数大约是50000/(24*3600)≈0.578次/秒。这个数值看起来并不高,可能用户有更高的并发需求,或者有其他考虑,比如每个用户的多次下载。需要进一步确认是否需要更高的并发来模拟真实场景,或者用户可能希望短时间内达到更高的吞吐量,但受限于总次数。 不过,用户可能希望确保系统在持续负载下的稳定性,所以24小时的长时间测试是必要的。这时候,分布式测试可以分担负载,避免单台机器资源不足。可能需要指导用户如何分配线程数,比如在多个从机上分别设置线程组,使得总线程数乘以每个线程的迭代次数达到目标。 另外,需要考虑测试脚本的设计。下载操作可能需要处理HTTP请求、处理可能的重定向、以及保存响应数据等。需要确保脚本正确模拟下载行为,比如使用HTTP GET请求,设置合适的路径和参数,处理cookies或会话等。 还有,定时器的使用可能很重要,为了更真实地模拟用户行为,可能需要添加随机延迟。但根据计算,平均每秒不到一次请求,可能不需要太多延迟,但需要根据实际情况调整。 监控和结果收集也是关键。用户需要确保从所有从机收集测试结果到主控机,以便分析性能数据。可能需要配置JMeter的结果收集器,或者使用后端监听器将数据发送到数据库或监控工具。 资源监控方面,除了JMeter自身的监听器,可能还需要监控服务器和测试机的CPU、内存、网络等,确保测试过程中没有资源瓶颈影响结果。 最后,验证测试结果是否达到5万次下载,可能需要检查聚合报告中的样本数,或者通过日志分析确认总请求数。同时,检查是否有错误发生,确保测试的有效性。 可能还需要提醒用户注意网络带宽,特别是如果下载的文件较大,多台机器同时下载可能消耗大量带宽,影响测试结果或真实服务器性能。 总结步骤应该是:准备测试环境,配置分布式JMeter,设计测试脚本,计算并发需求,执行测试,监控资源,收集结果,分析数据。需要将这些步骤详细解释给用户,确保他们能逐步实施。</think>以下是使用JMeter关联多台测试机实现**24小时5万下载数**的分步指南: --- ### **一、需求分析** 目标:模拟**24小时内完成5万次下载**,需计算平均请求速率: - **总时间**:24小时 = 86,400秒 - **总请求数**:50,000次 - **平均请求速率**:`50,000 / 86,400 ≈ 0.58次/秒` 实际需考虑**并发用户数**与**迭代次数**,确保长时间稳定运行。 --- ### **二、JMeter分布式测试配置** 通过**主控机(Master)+ 多台从机(Slave)**实现负载分担: 1. **从机配置**: - 每台从机安装JMeter,修改 `jmeter.properties`: ```properties server.rmi.ssl.disable=true # 关闭SSL(内网测试) server_port=1099 # 默认端口 ``` - 启动从机服务:`jmeter-server`(Linux)或 `jmeter-server.bat`(Windows) 2. **主控机配置**: - 修改 `jmeter.properties`,添加从机IP: ```properties remote_hosts=192.168.1.101,192.168.1.102,... # 从机IP列表 ``` - 使用命令行启动测试: ```bash jmeter -n -t test_plan.jmx -l result.jtl -r ``` - `-r` 表示启用远程从机 --- ### **三、测试脚本设计** 1. **线程组设置**: - **线程数**:根据从机数量均分负载(例如2台从机,每台设置25线程)。 - **持续时间**:86400秒(24小时)。 - **循环次数**:勾选“永远”,通过调度器控制时间。 2. **HTTP请求采样器**: - 方法:`GET` - 路径:填写文件下载URL(如 `/download/file.zip`) 3. **定时器**(可选): - 添加 **Constant Throughput Timer**,设置目标吞吐量(如 `60次/分钟`)。 4. **监听器**: - 添加 **Aggregate Report** 或 **Summary Report** 收集结果。 --- ### **四、执行与监控** 1. **启动分布式测试**: ```bash jmeter -n -t download_test.jmx -l results.jtl -r ``` 2. **资源监控**: - 使用 `nmon`(Linux)或 `任务管理器`(Windows)监控CPU、内存、网络。 - 通过JMeter的 **PerfMon Metrics Collector** 监听服务器性能。 3. **结果验证**: - 检查聚合报告中 **样本数(Samples)** 是否达到50,000。 - 分析平均响应时间与错误率。 --- ### **五、注意事项** 1. **网络带宽**:确保从机到服务器的带宽足够(尤其是大文件下载)。 2. **日志管理**:定期清理JMeter日志,避免磁盘占满。 3. **参数化**:若需不同用户下载不同文件,使用 **CSV Data Set Config** 参数化文件名。 4. **断言**:添加响应断言,验证下载是否成功(如响应代码200、文件大小>0)。 --- ### **六、扩展优化** - **使用云服务器**:通过AWS、阿里云等快速扩展从机数量。 - **容器化部署**:通过Docker快速部署多台JMeter从机。 - **持续集成**:将测试脚本集成到Jenkins,定期执行稳定性测试。 通过以上步骤,可高效利用多台测试机完成大规模下载性能验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值