使用内网负载机(Linux)执行Jmeter性能测试
一、背景
在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试,一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢?
遇到公网环境下性能测试达到了带宽瓶颈。那么这时,我们就需要考虑在内网环境负载机下来执行我们的性能测试以达到屏蔽带宽影响的目的。
系统对高并发做了防护,例如ddos防护
测试的并发过高导致负载机先达到瓶颈
本节我们介绍在内网负载机下执行JMeter性能测试。
二、准备
我们需要准备一下我们接下来需要用的东西:
-
ssh连接工具(例如:Xshell、Git Bash,在这里我们使用Git Bash)
-
apache-jmeter-5.5或以上(版本过高会导致java版本过高的报错提示)
-
性能测试脚本
-
脚本如下:
-
三、假设
在这里我们先做出一些假设:
- 被测网站为https://www.baidu.com。(我们一般在测试时测试的域名为http而非https)
- 负载机处于baidu内网环境中
- https://www.baidu.com 在内网中对应的内网ip为10.5.16.8
- 文章中负载机已安装配置环境,在本文中我们假设未安装任何环境
四、操作步骤
1、连接负载机
首先我们在脚本及jmeter所在文件夹下右键打开Git Bash
连接负载机
shell
ssh root@192.168.2.45 # root为登录的用户,@后为访问负载机ip地址
回车出现
root@192.168.2.45's password:
我们输入密码后回车即可,登录成功
2、检查环境
首先检查java环境
shell
java --version
出现类似以下内容表示环境中存在java
检查jmeter环境
shell
jmeter --version
出现类似以下内容表示环境中存在jmeter
查看Linux内存
shell
free -h
这里我们可以发现我们内存为1.6GB
查看LinuxCPU信息
shell
cat /proc/cpuinfo
这里我们看最后一个processor序号为1,故CPU为2核
查看Linux系统架构
shell
uname -a
这里可以知道系统架构为x86_64
3、测试准备
在上文中我们说到,假设负载机未安装任何环境。这里我们分别介绍两种方式进行安装。
(1)Java安装(链接下载)
首先我们打开Java官网(其他下载地址也可)https://www.oracle.com/java/technologies/downloads/,选择jdk17(这里我们用jdk17进行演示)
这里我们复制x64 Compressed Archive(具体下载的包取决于之前查询的CPU架构来决定)后的链接:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
创建java目录
shell
mkdir ~/myTest mkdir ~/myTest/java cd ~/myTest/java
使用wget命令下载,等待下载完成
shell
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
PS:该方法需要确保负载机可以连通外网使用一下命令检查
shell
ping www.baidu.com
下载完成后查看
解压
shell
tar -zxvf jdk-17_linux-x64_bin.tar.gz
(2)JMeter安装(文件传输)
向负载机传输文件我们可以通过ftp服务器传输。但是在这里我们用了Git Bash,在这里我们使用更加简便的scp来进行传输。
退回上一层,创建jmeter目录
shell
cd ../ mkdir jmeter cd jmeter
再次在放置脚本及jmeter所在文件夹下右键再次打开一个Git Bash
输入命令
shell
scp ./apache-jmeter-5.4.1.zip root@192.168.2.45:~/myTest/jmeter
输入密码后上传
上传后关闭该窗口,回到之前的bash窗口检查是否上传成功
解压
shell
unzip apache-jmeter-5.4.1.zip
到了这里我们就基本可以开始操作脚本了,但是大家可能会好奇,环境变量怎么没有配置呢?
并非是我们不配置环境变量,而是因为在测试中,我们一般不在客户的环境中配置永久环境变量,我们一般采用临时环境变量。这个我们在后面会说如何去配置
那么为什么要用临时环境变量呢?
临时环境变量是指仅在当前系统会话有效的环境变量,该环境变量不会被写入系统的环境变量文件,也不会被永久保存。临时环境变量会在关闭本次会话后自动清除,不会影响下一次系统登录。同时也不会影响用户原有服务的环境变量。
在这里我们还需要进行一步编辑,需要修改我们的jmeter.sh文件或jmeter文件,这里我们修改jmeter.sh文件。
进入bin目录
shell
cd bin ls
修改jmeter.sh
在这里有几个问题需要解释一下
为什么需要修改这个配置?
在大并发的测试中,我们需要的大量的内存来执行压力测试,而JMeter在默认情况下的内存分配非常低,我们需要自己把该项配置的最大堆修改成合适的值
那么我们应该修改成多少合适呢?
根据负载机的内存来决定该项的值为多少。在前面我们查询了内存为1.6GB,所以我们设置成1GB。一般建议设置为内存的80%。例如一台8GB的负载机,我们可以设置为6GB。
shell
vim jmeter.sh
找到JVM-ARGS
复制该行,去除注释,将512m修改为合适的大小
4、调试脚本
回到我们上面的脚本截图
既然我们是在内网环境下运行,那么我们应该将URL改为内网ip访问才会达到理想效果。否则同样需要走公网进行访问。那么我们需要怎么解决呢?
方法一:
我们可以直接将域名改为IP。但是该方法不推荐
方法二:
修改负载机的host文件。推荐
为什么我们不推荐方法一呢?
如果使用的是方法一,我们就无法本机上进行调试。而使用方法二我们不仅可以进行本机调试,而且在负载机上也走的是内网而不是公网。
5、修改host
我们先修改hosts文件
shell
vim /etc/hosts
输入i插入host信息,修改后按esc后输入:x
6、配置运行脚本
新建一个文件夹放置脚本
同样使用scp将脚本拷贝进文件夹
shell
scp ./内网测试.jmx root@192.168.2.45:~/myTest/jmeterTest
新建run.sh文件(也可以选择在本机新建好再传入负载机)
shell
mkdir run.sh vim run.sh
run.sh脚本如下
shell
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
shell
bash run.sh
环境生效
再次编辑run.sh
shell
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是否配置成功
运行完成后
我们可以再次使用scp命令将生成的jtll文件传回本地机后生成html报告,但是不推荐
为什么不推荐直接将脚本复制到本地机呢?
对于高并发的场景,生成的jtl文件会非常的庞大,所以我们一般建议将其生成为HTML报告,将HTML报告复制到本地机。如确实有必要收集jtl文件或者文件较小,可以采取直接将jtl文件复制到本机再生成HTML报告的方法
shell
scp root@192.168.2.45:~/myTest/jmeterTest/内网测试.jtl ./
如果需要再次生成html报告,将运行脚本注释,取消生成html报告的注释。再次bash run.sh即可
【性能测试】终于有一套全面的性能测试教程啦!真实企业性能测试全流程项目实战!
相关文章:

使用内网负载机(Linux)执行Jmeter性能测试
一、背景 在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试,一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢? 遇到公网环境下性能测试达到了带宽瓶颈。那么这时,我们就需要考虑在内网环境负载机下来执行我们…...

Web自动化测试进阶 —— Selenium模拟鼠标操作
鼠标操作事件 在实际的web产品测试中,对于鼠标的操作,不单单只有click(),有时候还要用到右击、双击、拖动等操作,这些操作包含在ActionChains类中。 ActionChains类中鼠标操作常用方法: 首先导入ActionChains类&…...
Python之函数
函数是什么? 函数是对程序逻辑进行结构化或过程化的一种编程方法,将整块代码巧妙地隔离成易于管理的小块。把重复代码放到函数中而不是进行大量的拷贝,这样既能节省空间,也有助于保持一致性;通常函数都是用于实现某一种…...

泛型工具类型和操作符
前言 TypeScript 内置了一些常用的工具类型。 PartialRequiredOmitPick.... 操作符 typeof typeof 操作符可以用来获取一个变量声明或对象的类型 const p {x:2,y:cm} let g:typeof p {x:3,y:ff} 这里g需要满足: 有x属性且值是number类型 有y属性且值是string类型…...

idea中启动maven项目报错-java: 程序包lombok.extern.slf4j不存在问题如何解决
1、 现象: 在springboot的maven项目启动时,报错: Error:(3, 27) java: 程序包lombok.extern.slf4j不存在 编译不报错,maven依赖也合适,项目就是无法启动 原因: 其实不是项目本身或者maven本身的问题&am…...

MyBatis-动态SQL
<if>标签 用于判断条件是否成立,使用test属性进行条件判断,如果条件为true,则拼接SQL <where>标签 where元素只会在子元素有内容的情况下插入where子句,而且会自动去除子句的开头的AND或OR <where><if tes…...

Swift学习内容精选(二)
Swift 类是构建代码所用的一种通用且灵活的构造体。 我们可以为类定义属性(常量、变量)和方法。 与其他编程语言所不同的是,Swift 并不要求你为自定义类去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个类,系…...

类欧笔记存档
电子版:https://blog.csdn.net/zhangtingxiqwq/article/details/132718582...

电能计量远程抄表系统的分析及在物业的应用
安科瑞 华楠 摘 要:结合当前电力企业实际的发展概况,可知电力活动开展中对于性能可靠的电能计量及远程抄表依赖程度高,需要注重它们实际应用范围的扩大,满足电力企业长期稳定发展的实际需求。基于此,本文将对电能计量…...
计算机网络篇之端口
计算机网络篇之端口 文章目录 计算机网络篇之端口前言概括分类总结 前言 我们知道ip地址可以确定向哪台主机转发数据,但是数据要发给主机的哪个进程,这个时候端口就派上用场了 概括 计算机网络端口是用于区分不同应用程序或网络服务的逻辑地址&#x…...

GO语言篇之发布开源软件包
GO语言篇之发布开源软件包 文章目录 GO语言篇之发布开源软件包新建仓库拉取到本地初始化项目编写代码提交代码发布引用软件包 我们写GO语言程序的时候难免会引用第三方的软件包,那么你知道别人是怎么发布自己的软件包吗,别急,这篇博客教你怎么…...

Eclipse官网下载历史版本
进入官网 https://www.eclipse.org/ 进入下载页面 选择下载包 同一版本,又有不同类型 Eclipse IDE for Enterprise Java and Web Developers Eclipse IDE for Java Developers 任何Java开发人员必备的工具,包括Java IDE、Git客户端、XML编辑器、Mave…...
SCI常见词汇表达
一.被认为 is known to;it is known thatbe regarded asis characterized byis believed toit is generally acknowledged thathave been implicatedit has been shown that 二.表明 revel ; demonstrate ; appeared toreport ; considered as ; uncoverfound ; show ; impl…...
使用ref如何获取到input标签中的值
要使用 ref 获取到 input 标签中的值,首先需要创建一个 ref 对象并将其绑定到 input 标签上。然后,可以通过访问 ref 对象的 value 属性来获取标签中的值。 下面是一个示例代码: import React, { useRef } from react; function App() {cons…...

自定义Dynamics 365实施和发布业务解决方案 3. 开箱即用自定义
在本章中,您将开始开发SBMA会员应用程序。在开发的最初阶段,主要关注开箱即用的定制。在第2章中,我们讨论了如何创建基本解决方案的细节,在本章中,将创建作为解决方案补丁的基本自定义,并展示将解决方案添加到源代码管理和目标环境的步骤。 表单自定义 若要开始表单自定…...
python-pytorch 关于torch.load()和torch.load_state_dict()
python-pytorch 关于torch.load和torch.load_state_dict 1、关于模型保存和加载2、关于加载模型结构 最近在使用pytorch训练和加载模型时遇到了一些很玄学的问题,研究了一下,总结如下: 1、关于模型保存和加载 1、如果保存时使用了torch.save…...

关于批量安装多个apk
for %i in (apks地址/*.apk); do adb install %i https://www.cnblogs.com/lihongtaoya/p/15084378.html adb install -r apks地址/1.apk && adb install -r apks地址/2.apk install-multi-package - 暂时nok https://adbshell.com/commands 最新版本的platform-tool…...

【案例教学】华为云API对话机器人的魅力—体验AI垃圾分类机器人
云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:人工智能AI自言语言的情感分析、文本分词、文本翻译 1 IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE&a…...
go基础详解2-go run test
一 go run 编译运行一个main 包(package),常用的运行方式如下: go run . go run hello go run 后面接路径,该路径(不含子路径)下所有的go源文件都属于main包。 go run filename1 filename1 …...

【NVIDIA CUDA】2023 CUDA夏令营编程模型(三)
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...