基于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作为实时监控工具。
具体工具选择如下:
| 核心工具 | 版本 | 备注 |
|---|---|---|
| Jmeter | 3.3 | 提供并发请求能力 |
| PerfMon Metrics Collector | 2.1 | Jmeter插件,用于收集服务器资源使用信息 |
| ServerAgent | 2.2.1 | 以伺服形式发送服务器资源使用信息 |
| nMon | 16h v2 | 实时收集服务器资源信息 |
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插件就将按照配置开始采集服务器资源数据。
以上工具如遇下载困难,可以到以下网盘下载:
链接:https://pan.baidu.com/s/1q_gnMNqY8NpYbm8boSj_Jg
提取码:uto0
4. 测试结果
4.1 聚合报告
| 总样本数 | 平均 | 中位 | 高位 | 最小 | 最大 | 错误率 | 吞吐量 | 接收数据量(KB/s) | 发送数据量(KB/s) |
|---|---|---|---|---|---|---|---|---|---|
| 68711231 | 299 | 268 | 791 | 23 | 12520 | 0.00% | 667.52975 | 354.63 | 809.64 |
总体样本数达到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的稳定性测试记录的更多相关文章
- 【jmeter】接口稳定性测试
1.创建进行测试的脚本 2.场景设置 线程组设置并发用户数30 在启动1s,30并发用户全部启动 循环设置为永远 采用调度器:有两种工作方式 1.设置启动和结束时间 2.设置持续时间,我设置的是60s ...
- 转:基于Jmeter的MQTT测试插件
基于Jmeter的MQTT测试插件-上 1. Jmeter插件简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.下载 用于对软件做压力测试,它最初被设计用于Web应用 ...
- 基于jmeter的性能测试平台(二) 一个构想
之前基于jmeter搭好了分布式测试平台,但是感觉还是很粗糙,打算给它穿点衣服. 整个架构差不多就像下面这个图. (1)基于python django做一个web页面,友好地管理测试过程 (2)con ...
- [转贴]LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project
https://blog.csdn.net/melody157398/article/details/24354415 LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---I ...
- 使用JMeter进行RESTful API测试
使用JMeter进行RESTful API测试 在哪里设置实现最优脚本重用的属性 由于支持云的应用程序通常可以轻松.快速地进行复制和部署,所以可以在多种环境中对其进行测试.如果您需要在多个环境中测试和 ...
- Jmeter使用指南----压力测试工具
来源: https://blog.csdn.net/u012111923/article/details/80705141 https://www.cnblogs.com/st-leslie/p/51 ...
- monkey稳定性测试的步骤及策略
1.adb的作用是什么?adb的全称:android debug bridge 安卓调试桥梁,包含在 Android SDK 平台工具软件包中.通过该命令与设备进行通信,以便进行调试adb可以同时管理 ...
- 对Linux系统内核版本稳定性测试介绍
对Linux系统内核版本稳定性测试介绍 在对 Linux 内核版本稳定性的测试中,需要明确地声明并证明为什么版本是稳定的或者是不稳定的. 然而还没有被证明和证实当前现有的系统范围内的压力测试可以测试 ...
- LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project
LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project Peter盼 2014-04-23 11:25:49 20302 收藏 ...
随机推荐
- MyBatis从入门到精通(十二):使用collection标签实现嵌套查询
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解使用collectio ...
- WEB前端--返回顶部特效源码
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- MyBatis foreach标签的用法
From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...
- Lucene05-分词器
Lucene05-分词器 1.概念 Analyzer(分词器)的作用是把一段文本中的词按规则取出所包含的所有词.对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同 ...
- exgcd、二元一次不定方程学习笔记
(不会LATEX,只好用Word) ( QwQ数论好难) 再补充一点,单次询问a,b求逆元的题可以直接化简然后套用exgcd求解. 例题:https://www.luogu.org/problemne ...
- 通信模型socket
I/O的概念 操作系统的分为socket的I/O还有用户界面的输入输出,一般一个输入操作分为两个不同的阶段,1)等待数据准备好:2)从内核向进程复制数据 从理论上来讲,阻塞I/O.非阻塞I/O.复用I ...
- IT技术人员的自我修养
1. 前言 在IT领域摸爬滚打多年,从一个普通程序员到技术主管,到技术经理,再到技术总监,踩过不少坑.加过不少班,也背过不少锅,在提升自身技术能力与管理能力的同时,也一直在思考,作为IT ...
- pycharm remote debug
换工作了好久没写blog了,堕落了,哈哈,发现了好的东西分享一下,和以前使用的pycharm的远程debug相比,更为方便,原理同步本地和远程的代码,加载远程的环境运行,使用本地的代码+远程的环境,方 ...
- Java Web项目案例之---登录和注册(精华版)
登录和注册(精华版) (一)实现功能 1.使用cookie记录登录成功的用户名,用户选择记住用户名,则用户再次登录时用户名自动显示 2.实现文件上传功能(上传文件的表单上传于普通的表单上传不同,必须是 ...
- centos7更新yum库为aliyun库
1. 备份原来的yum源$sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.设置ali ...