基于jmeter+perfmon的稳定性测试记录
1. 引子
最近承接了项目中一些性能测试的任务,因此决定记录一下,将测试的过程和一些心得收录下来。
说起来性能测试算是软件测试行业内,有些特殊的部分。这部分的测试活动,与传统的测试任务差别是比较大的,也比较依赖工具,一定程度上性能测试被认为是测试中的“高阶”部分,跟自动化测试、安全测试等并称。
2. 任务情况
2.1 任务总览
本次平台稳定性测试的目的在于:在服务器压力处于较饱和(达到80%系统最大TPS)压力之下,在较长时间(>8小时)之内观测服务器稳定性问题,以及资源使用情况和异常。
2.2 接口情况
本次测试不调用上下游接口,只压测创建订单接口。订单表存量数据19万,接口请求方式为PUT。
2.3 服务器配置
网关服务器 16核CPU、内存16G
应用服务器 16核CPU、内存16G
3. 测试过程
3.1 测试机及工具选择
由于在前序的测试过程中,可以确定本机jmeter运行可以驱动200线程数,达到接近系统极限吞吐量的情况。
因此本次稳定性测试决定延续使用本地PC使用jmeter仍以200线程进行测试,测试重点在于较长时间段内的稳定情况。
涉及到服务器资源的监控,将决定使用Jmeter插件perfmon配合serverAgent进行采集,以nmon作为实时监控工具。
具体工具选择如下:

3.2 工具安装配置
3.2.1 Jmeter
下载地址:http://jmeter.apache.org/download_jmeter.cgi
现在的最近版本为5.11,需要JDK 8+。建议使用3系列版本,原因后面说明。
安装配置:JDK以及环境配置等网上有大量教程,本文不再复述
3.2.2 ServerAgent
这个东西真是难找,从官网下载下来中断了很多次,好在最后还是下好了。
ServerAgent需要部署在服务器上,他会以service的形式将服务器资源使用信息进行收集和发送。
下载地址:
http://jmeter-plugins.org/downloads/all/
安装配置:将工具包解压至服务器,赋予755权限,直接使用./startAgent.sh启动服务。
启动成功后应该看到如下信息:

默认绑定端口为4444.
3.2.3 Perfmon
Perfmon是Jmeter插件,配合ServerAgent进行服务器资源监听。
下载地址:
https://jmeter-plugins.org/?search=jpgc-perfmon
安装配置:需要下载Jmeter plugin manager:
https://jmeter-plugins.org/install/Install/
将jar包放至JMeter 安装目录下的 lib/ext 子目录下,重启jmeter即可生效。
同样将perfMon jar包放至相同路径即可启用perfmon插件。
也可以通过GUI界面中的plugin manager 搜索安装,如下图所示:

3.2.4 nmon
下载地址:
http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
找到支持服务器系统的版本下载
或者通过wget 下载:
https://nchc.dl.sourceforge.net/project/nmon/nmon16d_x86.tar.gz
安装配置:将压缩包解压至自选目录,赋予755权限,直接运行相应系统的.sh文件即可运行。(如果下载的文件不是.sh格式,可以直接更改后缀名)
本例中运行的就是如下脚本文件:

运行成功后可以看到如下界面:

可以通过键入c/m/d/n等调出相关资源监控,如下图,分别列出了CPU,Memory及磁盘IO:

3.2.5 Perfmon插件配置
在jmeter测试计划中添加perfmon监听器:

在配置界面中,添加所需要的监控项,如本例中监听了CPU/Memory/磁盘IO三项:

注意箭头标出的按钮,为监听具体度量的选择,本例中选择的分别是:
CPU:combined :综合CPU使用情况
Memory:usedperc:内存使用比例
DIsk IO:usedperc:磁盘IO占用比例
保持ServerAgent开启,那么在线程组运行开始,perfmon插件就将按照配置开始采集服务器资源数据。
4. 测试结果
4.1 聚合报告

总体样本数达到68676639个,平均响应时间299,吞吐量667.5/s,错误率0,总体比较稳定。
4.2 TPS及资源对比
TPS:

CPU:

内存:

可以看到:
TPS稳定在700-800之间,偶有波动,与实验室网络环境有关。CPU在TPS峰值时处于高占用状态,基本维持在70%左右。内存占用稳定在20%。
4.3 结论
经过本轮初步测试,在系统TPS保持在700以上的条件下,系统表现稳定,事务成功率达100%。测试过程中,CPU保持高位占用,其它系统资源未见明显瓶颈。
5. 问题
在测试的过程中发现了部分明显的问题,在此进行记录:
问题1:
压测过程中曾遇系统内存被大量缓存并无法自动释放的情况。
解决:
建立定时任务,定时清理内存缓存。
问题2:
压测过程中曾遇系统磁盘被占100%情况,导致TPS降至200左右,经查是由于应用日志写入导致。
解决:
建立定时任务,定时清理应用日志。
问题3:
测试中曾遇jmeter报错address already in use,经查是由于jmeter5本机环境过度占用系统端口导致,尝试增加开放端口数但是并未解决。改用jmeter3.3以后解决!
相关文章:
基于jmeter+perfmon的稳定性测试记录
1. 引子 最近承接了项目中一些性能测试的任务,因此决定记录一下,将测试的过程和一些心得收录下来。 说起来性能测试算是软件测试行业内,有些特殊的部分。这部分的测试活动,与传统的测试任务差别是比较大的,也比较依赖…...
前沿论文 M5Product 组会 PPT
对比学习(Contrast learning):对比学习是一种自监督学习方法,用于在没有标签的情况下,通过让模型学习哪些数据点相似或不同来学习数据集的一般特征。假设一个试图理解世界的新生婴儿。在家里,假设有两只猫和…...
navicat~导出数据库密码
当我们mysql密码忘记了,而在navicat里有记录,我们应该如何导出这个密码呢? 第一步:文件菜单,导出链接,导出连接获取到 connections.ncx 文件 这里需要勾选 导出密码!!! 不然导出的文…...
【Java】 —— 数据结构与集合源码:Vector、LinkedList在JDK8中的源码剖析
目录 7.2.4 Vector部分源码分析 7.3 链表LinkedList 7.3.1 链表与动态数组的区别 7.3.2 LinkedList源码分析 启示与开发建议 7.2.4 Vector部分源码分析 jdk1.8.0_271中: //属性 protected Object[] elementData; protected int elementCount;//构造器 public …...
YOLOv5改进——添加SimAM注意力机制
目录 一、SimAM注意力机制核心代码 二、修改common.py 三、修改yolo.py 三、建立yaml文件 四、验证 一、SimAM注意力机制核心代码 在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。这里为simam.py。复制以下代码到文件里面。 import…...
SQL 自学:表别名的运用与对被联结表使用聚集函数
一、表别名的概念与作用 (一)表别名的定义 表别名是为表指定的临时名称,在 SQL 查询中使用别名可以简化表名,提高代码的可读性和可维护性。当表名较长或在复杂的查询中多次引用表时,使用表别名可以避免重复输入冗长的…...
jmeter学习(2)变量
1)用户定义的变量 路径:添加-》配置元件-》用户定义的变量 用户定义的变量是全局变量,可以跨线程组被调用,但在启动运行时获取一次值,在运行过程中不再动态获取值。 注意的是,如果在某个线程组定义了全…...
【C#生态园】C#文件压缩库全面比较:选择最适合你的库
从核心功能到API概览:深度解析六大C#文件压缩库 前言 在软件开发过程中,文件的压缩和解压缩是一个常见的需求。针对C#开发者而言,选择合适的文件压缩库可以极大地简化开发工作。本文将介绍几个常用的C#文件压缩库,包括其核心功能…...
【测试】接口测试与接口自动化
壹、接口测试基础 一、接口测试概念 I、基础概念 是测试系统组件间接口的一种测试。 主要用于检测外部系统与系统间、内部子系统间的交互点;测试重点检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系。 内部接口调用相当于函数调用&am…...
Android设置边框圆角
在Android开发中,圆角设计十分常见,那么实现边框圆角有几种形式呢? 文章目录 设置圆角边框样式使用ClipToOutline进行裁切最后 设置圆角边框样式 常见的方式是在drawable文件夹下设置一个xml文件的边框样式,比如 <shape andro…...
SpringBoot项目打成jar包,在其他项目中引用
1、首先新建一个SpringBoot工程 记得要将Gradle换成Maven 2、新建一个要引用的方法 3、打包的时候要注意: ① 不能使用springboot项目自带的打包插件进行打包,下面是自带的: ②要换成传统项目的maven打包,如下图: 依…...
【音频可视化】通过canvas绘制音频波形图
前言 这两天写项目刚好遇到Ai对话相关的需求,需要录音功能,绘制录制波形图,写了一个函数用canvas实现可视化,保留分享一下,有需要的直接粘贴即可,使用时传入一个1024长的,0-255大小的Uint8Arra…...
解决github每次pull push输入密码问题
# 解决git pull/push每次都需要输入密码问题 git bash进入你的项目目录,输入: git config --global credential.helper store然后你会在你本地生成一个文本,上边记录你的账号和密码。配置项写入到 "C:\Users\用户名\ .gitconfig" …...
Java重修笔记 第六十四天 坦克大战(十四)IO 流 - 标准输入输出流、InputStreamReader 和 OutputStreamWriter
标准输入输出流 1. System.in 标准输入流 本质上是一个InputString,对应键盘,表示从键盘输入。 定义:public final static InputStream in null; 所以 Scanner scanner new Scanner(System.in); 会从键盘中获取数据 2. System.out 标准输…...
prctl的函数和pthread_self函数
1.prctl的函数原型如下: #include<sys/prctl.h> prctl(PR_SET_NAME, “process_name”);第一个参数是操作类型,指定PR_SET_NAME(对应数字15),即设置进程名; 第二个参数是进程名字符串,…...
Vim 命令行模式下的常用命令
Vim 命令行模式下的常用命令 文件操作: :w :保存当前文件。:w filename :将当前内容另存为指定的 filename 。:q :退出 Vim,如果文件有修改但未保存,会提示错误。:q! :强制退出 Vim,…...
【动态规划-最长递增子序列(LIS)】力扣2826. 将三个组排序
给你一个整数数组 nums 。nums 的每个元素是 1,2 或 3。在每次操作中,你可以删除 nums 中的一个元素。返回使 nums 成为 非递减 顺序所需操作数的 最小值。 示例 1: 输入:nums [2,1,3,2,1] 输出:3 解释: …...
Elastic Stack--16--ES三种分页策略
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 方式一:from size实现原理使用方式优缺点 方式二:scroll实现原理使用方式优缺点 方式三:search_after实现原理使用方式优缺点 三…...
[LeetCode] 315. 计算右侧小于当前元素的个数
题目描述: 给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 题目链接: . - 力扣(LeetCode) 题目主要思路&a…...
【hot100-java】二叉树展开为链表
二叉树篇。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
