zoukankan      html  css  js  c++  java
  • 基于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进行服务器资源监听。

    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以后解决!(这块仍不确定问题所在,有知道的朋友欢迎交流!)

  • 相关阅读:
    python mysqldb 模块学习
    接口自动化学习笔记
    unittest 单元测试框架断言方法
    Python+Django+Bootstrap 框架环境搭建
    Django CSRF cookie not set.错误
    django安装与卸载
    jmeter+ant+jenkins接口自动环境搭建
    jmeter 非GUI模式下测试报错An error occurred: Unknown arg:
    非 GUI 模式运行 JMeter 压力测试
    Android SDK开发包国内下载地址
  • 原文地址:https://www.cnblogs.com/dayu2019/p/11287065.html
Copyright © 2011-2022 走看看