基于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以后解决!

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看。

【2025最新版】字节大牛讲的最全最细的自动化测试全套教程!永久白嫖,拿走不谢,全程干货无废话!逼自己15天内学完,从软件测试基础到项目实战一套全通关!

### 关于 JMeter 性能测试的实验报告与示例文档 JMeter 是一款强大的开源性能测试工具,能够用于测试静态资源(如 HTML 和 JavaScript 文件)以及动态资源(如 PHP、JSP 页面和 AJAX 请求)。它不仅可以帮助识别系统的最大并发用户承载能力,还提供了多种类型的性能分析报告[^1]。 #### 获取 JMeter 的官方文档 如果需要下载 JMeter 的相关文档,可以从其安装包中的 `docs` 或 `printable_docs` 目录获取。这些目录包含了详细的本地文档和可打印版本的指南文件[^2]。此外,还可以访问 Apache JMeter 官网以获得最新的在线文档和支持材料。 #### 示例文档结构建议 一份完整的 JMeter 性能测试实验报告通常应包括以下几个部分: 1. **测试背景** 描述被系统的业务场景和技术架构,明确本次性能测试的目标是什么。例如,是否为了验证某个特定接口的最大吞吐量或者评估整个应用的服务质量? 2. **环境准备** 列举所使用的硬件设备规格、网络条件以及其他可能影响测试结果的因素;同时记录 JMeter 工具的具体版本号及其配置情况。 3. **脚本开发** 使用 BadBoy 等辅助工具录制初始操作流程并将其导出为 `.jmx` 格式的脚本文件。接着通过修改线程组设置来定义虚拟用户的数量及执行策略,并完成必要的参数化工作以便模拟真实的数据交互需求[^3]。 4. **运行测试计划** 添加监听组件观察请求响应时间曲线图谱变化趋势,利用断言机制确认返回内容准确性。对于长时间压力下的稳定性考察,则需配合后台部署好的 PerfMon Plugin 来采集 CPU/Memory/Disk I/O 等关键指标数值。 5. **数据分析总结** 基于收集到的各项统计数据绘制图表展示瓶颈所在位置,并据此提出优化改进建议。 以下是基于上述框架的一个简单 Python 脚本来生成 PDF 报告模板的例子: ```python from fpdf import FPDF class PDF(FPDF): def header(self): self.set_font('Arial', 'B', 12) title = "Performance Test Report" width = self.get_string_width(title) + 6 self.cell(width, 9, '', border=0) def create_report(): pdf = PDF() pdf.add_page() # Add content here... create_report() ``` #### 如何找到现成案例? 除了自行编写外,互联网上也有许多公开分享的成功实践可供参考学习。比如某篇博文提到作者在加入新团队后快速熟悉项目背景并通过细致梳理各个待检 API 接口特性制定出了合理的测试方案[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值