当前位置: 首页 > news >正文

基于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开发中&#xff0c;圆角设计十分常见&#xff0c;那么实现边框圆角有几种形式呢&#xff1f; 文章目录 设置圆角边框样式使用ClipToOutline进行裁切最后 设置圆角边框样式 常见的方式是在drawable文件夹下设置一个xml文件的边框样式&#xff0c;比如 <shape andro…...

SpringBoot项目打成jar包,在其他项目中引用

1、首先新建一个SpringBoot工程 记得要将Gradle换成Maven 2、新建一个要引用的方法 3、打包的时候要注意&#xff1a; ① 不能使用springboot项目自带的打包插件进行打包&#xff0c;下面是自带的&#xff1a; ②要换成传统项目的maven打包&#xff0c;如下图&#xff1a; 依…...

【音频可视化】通过canvas绘制音频波形图

前言 这两天写项目刚好遇到Ai对话相关的需求&#xff0c;需要录音功能&#xff0c;绘制录制波形图&#xff0c;写了一个函数用canvas实现可视化&#xff0c;保留分享一下&#xff0c;有需要的直接粘贴即可&#xff0c;使用时传入一个1024长的&#xff0c;0-255大小的Uint8Arra…...

解决github每次pull push输入密码问题

# 解决git pull/push每次都需要输入密码问题 git bash进入你的项目目录&#xff0c;输入&#xff1a; git config --global credential.helper store然后你会在你本地生成一个文本&#xff0c;上边记录你的账号和密码。配置项写入到 "C:\Users\用户名\ .gitconfig" …...

Java重修笔记 第六十四天 坦克大战(十四)IO 流 - 标准输入输出流、InputStreamReader 和 OutputStreamWriter

标准输入输出流 1. System.in 标准输入流 本质上是一个InputString&#xff0c;对应键盘&#xff0c;表示从键盘输入。 定义&#xff1a;public final static InputStream in null; 所以 Scanner scanner new Scanner(System.in); 会从键盘中获取数据 2. System.out 标准输…...

prctl的函数和pthread_self函数

1.prctl的函数原型如下&#xff1a; #include<sys/prctl.h> ​prctl(PR_SET_NAME, “process_name”);第一个参数是操作类型&#xff0c;指定PR_SET_NAME&#xff08;对应数字15&#xff09;&#xff0c;即设置进程名&#xff1b; 第二个参数是进程名字符串&#xff0c;…...

Vim 命令行模式下的常用命令

Vim 命令行模式下的常用命令 文件操作&#xff1a; :w &#xff1a;保存当前文件。:w filename &#xff1a;将当前内容另存为指定的 filename 。:q &#xff1a;退出 Vim&#xff0c;如果文件有修改但未保存&#xff0c;会提示错误。:q! &#xff1a;强制退出 Vim&#xff0c…...

【动态规划-最长递增子序列(LIS)】力扣2826. 将三个组排序

给你一个整数数组 nums 。nums 的每个元素是 1&#xff0c;2 或 3。在每次操作中&#xff0c;你可以删除 nums 中的一个元素。返回使 nums 成为 非递减 顺序所需操作数的 最小值。 示例 1&#xff1a; 输入&#xff1a;nums [2,1,3,2,1] 输出&#xff1a;3 解释&#xff1a; …...

Elastic Stack--16--ES三种分页策略

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 方式一&#xff1a;from size实现原理使用方式优缺点 方式二&#xff1a;scroll实现原理使用方式优缺点 方式三&#xff1a;search_after实现原理使用方式优缺点 三…...

[LeetCode] 315. 计算右侧小于当前元素的个数

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;按要求返回一个新数组 counts 。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目主要思路&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) {* …...

基于Arduino与VS1053的宠物智能服装DIY:嵌入式系统集成实践

1. 项目概述与核心思路给宠物做一件会发光、会发声的智能服装&#xff0c;听起来像是科幻电影里的情节&#xff0c;但用今天触手可及的硬件和开源工具&#xff0c;这完全是一个可以亲手实现的周末项目。这个项目的核心&#xff0c;是将一个微小的“智能大脑”和一套声光系统&am…...

无王无帝定乾坤,来自田间第一人 海棠山铁哥布大道兴世

无王无帝定乾坤 ——来自田间第一人“山河起落&#xff0c;不在帝王&#xff1b;世道兴衰&#xff0c;系于百姓。”一、王权落幕&#xff0c;大道升起 古往今来&#xff0c;世人总把天下兴亡系于龙椅之上。 却不知—— 真正扭转乾坤的力量&#xff0c;深藏在乡野沃土&#xff0…...

用Circuit JS在线模拟器,5分钟搞定欧姆定律和LRC振荡电路实验

用Circuit JS在线模拟器&#xff0c;5分钟搞定欧姆定律和LRC振荡电路实验 在电子工程和物理教学中&#xff0c;理论公式与实验验证的结合一直是提升学习效率的关键。传统实验室受限于设备、场地和时间&#xff0c;而Circuit JS这款基于浏览器的开源电路模拟器&#xff0c;恰好填…...

2026 免费在线照片换背景底色怎么做?详细操作方法 + 工具实测

想要快速改变照片背景底色却不知道怎么操作&#xff1f;本文为你盘点了最实用的免费在线照片换背景底色工具&#xff0c;涵盖详细的操作步骤和使用场景&#xff0c;让你轻松搞定各类背景处理需求。为什么需要在线换背景底色&#xff1f;在日常生活中&#xff0c;很多时候我们拍…...

ABAP选择屏幕搜索帮助:如何用F4IF_INT_TABLE_VALUE_REQUEST实现字段联动(附完整代码)

ABAP选择屏幕动态搜索帮助实战&#xff1a;用回调函数破解字段联动难题 当你在SAP系统中设计一个物料主数据报表时&#xff0c;是否遇到过这样的困扰&#xff1a;用户需要先选择公司代码&#xff0c;然后根据所选公司代码动态过滤成本中心的搜索帮助值&#xff1f;传统的F4IF_I…...

别再手动导数据了!用PostgreSQL FDW把ClickHouse和MongoDB变成你的“超级外挂”数据仓库

异构数据联邦实战&#xff1a;用PostgreSQL FDW构建零延迟数据枢纽 当业务数据散落在多个异构数据库中时&#xff0c;传统ETL方案就像用卡车在不同仓库之间搬运货物——不仅耗时耗力&#xff0c;数据新鲜度也难以保证。想象一下&#xff1a;用户画像在PostgreSQL&#xff0c;行…...

告别M3U8下载烦恼:N_m3u8DL-CLI-SimpleG让你的视频下载变得超简单!

告别M3U8下载烦恼&#xff1a;N_m3u8DL-CLI-SimpleG让你的视频下载变得超简单&#xff01; 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 你是否曾经面对心爱的在线视频却束手无…...

使用 Elcomsoft System Recovery 恢复 Windows 凭据

在传统的取证工作流程中&#xff0c;获取 Windows 系统的访问权限曾是一件比较直接的事情&#xff1a;从本地数据库中提取 NT 哈希&#xff0c;然后运行一次快速的离线攻击。如今&#xff0c;Windows 身份验证正从那些本质上不安全的 NTLM 哈希向更具弹性的机制迁移。微软正积极…...

(二)OpenOFDM频偏校正:从原理到实现的信号修复之旅

1. 当信号开始"跳舞"&#xff1a;认识频偏问题 第一次调试无线接收链路时&#xff0c;我看到示波器上的星座图像被熊孩子打翻的跳棋——本该整齐排列的16-QAM信号点&#xff0c;现在像喝醉了一样在屏幕上乱转。这种"信号跳舞"的现象&#xff0c;就是我们今…...

保姆级教程:用STM32+ESP8266+微信小程序,5分钟搞定Onenet数据上传与设备控制

零基础实战&#xff1a;STM32ESP8266微信小程序极速对接Onenet全指南 在物联网技术快速普及的今天&#xff0c;许多嵌入式开发者都希望快速搭建一个完整的智能设备系统。本文将带你用最简单的方式&#xff0c;通过STM32微控制器、ESP8266 WiFi模块和微信小程序&#xff0c;实现…...