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的稳定性测试记录的更多相关文章

  1. 【jmeter】接口稳定性测试

    1.创建进行测试的脚本 2.场景设置 线程组设置并发用户数30 在启动1s,30并发用户全部启动 循环设置为永远 采用调度器:有两种工作方式 1.设置启动和结束时间 2.设置持续时间,我设置的是60s ...

  2. 转:基于Jmeter的MQTT测试插件

    基于Jmeter的MQTT测试插件-上 1. Jmeter插件简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.下载 用于对软件做压力测试,它最初被设计用于Web应用 ...

  3. 基于jmeter的性能测试平台(二) 一个构想

    之前基于jmeter搭好了分布式测试平台,但是感觉还是很粗糙,打算给它穿点衣服. 整个架构差不多就像下面这个图. (1)基于python django做一个web页面,友好地管理测试过程 (2)con ...

  4. [转贴]LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project

    https://blog.csdn.net/melody157398/article/details/24354415   LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---I ...

  5. 使用JMeter进行RESTful API测试

    使用JMeter进行RESTful API测试 在哪里设置实现最优脚本重用的属性 由于支持云的应用程序通常可以轻松.快速地进行复制和部署,所以可以在多种环境中对其进行测试.如果您需要在多个环境中测试和 ...

  6. Jmeter使用指南----压力测试工具

    来源: https://blog.csdn.net/u012111923/article/details/80705141 https://www.cnblogs.com/st-leslie/p/51 ...

  7. monkey稳定性测试的步骤及策略

    1.adb的作用是什么?adb的全称:android debug bridge 安卓调试桥梁,包含在 Android SDK 平台工具软件包中.通过该命令与设备进行通信,以便进行调试adb可以同时管理 ...

  8. 对Linux系统内核版本稳定性测试介绍

    对Linux系统内核版本稳定性测试介绍 在对 Linux 内核版本稳定性的测试中,需要明确地声明并证明为什么版本是稳定的或者是不稳定的. 然而还没有被证明和证实当前现有的系统范围内的压力测试可以测试 ...

  9. LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project Peter盼 2014-04-23 11:25:49  20302  收藏  ...

随机推荐

  1. Centos7 防护墙 设置端口

    Centos7中的防火墙调整为firewalld,试一下systemctl stop firewalld关闭防火墙. 命令:systemctl stop firewalld 命令:systemctl ...

  2. SpringCloud解析之Eureka

    本文基于Spring Cloud Edgware.SR6版本,从功能和架构上解析Eureka,让大家对Eureka有一个较为清晰的认识(本文默认大家对分布式微服务有一个初步的概念和理解,本文不涉及或少 ...

  3. Redis 使用C#程序操作Redis

    一.安装操作所需Nuget包 二.写入 redis只是按Key值设置过期时间,不是对value内部的某些值设过期 2.1 string类型 /// <summary> /// 向Redis ...

  4. Nginx+vsftpd

    一.安装Nginx 关闭selinux和firewalld setenforce sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selin ...

  5. Bzoj 1040 [ZJOI2008]骑士 题解

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5368  Solved: 2044[Submit][Status ...

  6. CAxWindow

    AtlAxWinInit(); CAxWindow m_wndFlashPlayer; CComPtr<IShockwaveFlash> m_FlashPtr; CComPtr<IU ...

  7. Java的几种创建实例方法的性能对比

    近来打算自己封装一个比较方便读写的Office Excel 工具类,前面已经写了一些,比较粗糙本就计划重构一下,刚好公司的电商APP后台原有的导出Excel实现出现了可怕的性能问题,600行的数据生成 ...

  8. springBoot-mongodb

    作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权归作者所有,转载请注明出处 mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到 ...

  9. 02-Kubenetes资源

    目录 Kubenetes资源 常用资源对象 标签labels 创建资源的方式 Pod pods.spec.containers 必须 nodeSelector <map [string]stri ...

  10. redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案

    一.前言 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是 ...