原标题:一个典型的测试压力机的性能调优过程

性能测试过程中,不仅仅是对被测系统的性能问题定位、分析、优化,很多时候负责批量请求发起的压力机也存在各类性能瓶颈。毕竟用几千块钱的机器就想把几个亿的机器压瘫也是稍稍需要点技术的。

这里介绍一次典型的压力机性能优化过程,期间涉及到磁盘IO问题、CPU不足的问题、内存耗尽的问题,分别采用参数调整、代码调整等方法一一化解。

压力机disk busy100%问题

(一) 问题

压力机的一个重要功能是作为挡板,接收A报文,返回对应的B报文。

性能测试过程中发现,用来接收报文的的本地队列拥堵,收到一批报文后,挡板要较长时间才能处理完,即回挡报文的效率很低。比如,接收A报文共10分钟,挡板一共用了17分钟才将所有B报文返回。

(二) 分析定位

首先看PC的任务管理器->资源监视器,从CPU、内存、网络、磁盘入手分析

发现PC机“磁盘最长活动时间”长时间保持100%

接下来查看哪个进程用磁盘最多,发现是JAVA,但JAVA的应用很多,需要具体定位到是哪个应用。

在任务管理器中看这个进程是哪个应用,单击那个进程,右键“打开文件位置”;定位到使用磁盘最多的是MQ程序。

(三) 解决

MQ导致的写磁盘IO过多,最简单的方法就是减少写IO的次数。MQ写磁盘无非就是写日志、写报文,怎么样减少写IO的测试,这里需要一些MQ的知识。

1. 循环日志VS线性日志

MQ日志,有循环日志和线性日志两种,其中:

1)线性日志是连消息内容都保存在日志里,如果queue里面的消息被删了,也可以用日志恢复,即线性日志保存的内容多。

2)循环日志不保存消息

检查mq日志是不是线性日志,如果是,可以改为循环日志来缓解。

如果不起作用,进入下一步

2. 3重写入VS 1重写入

MQ默认的日志写入是3重写入。改为1重写入

这样可以节省大量Disk IO

如果还没有达到效果,进入下一步

3. 持久消息VS非持久消息

持久消息是要写的磁盘的文件里,且记日志(两次写磁盘)

非持久消息,不记日志,一般不会写到磁盘里,除非mq buffer不够用,放不下当前的消息,才会进入磁盘,(非持久消息只有在发不出去的情况下才丢掉,一般情况不会丢失),即一般情况不写磁盘

对于测试压力机,可以容许异常情况下丢报文,所以可以改为非持久消息,这样,又少了一次写IO。

4. 增大MQ buffer

上面提到“非持久消息,不记日志,一般不会写到磁盘里,除非MQ buffer不够用,放不下当前的消息,才会进入磁盘”。因此增大MQ Buffer也可以在某些压力情况下减少一次写IO。

本场景中,我们调整MQ buffer为10M。

(四) 效果

最后“磁盘最长活动时间”由100%变为10%以下,TPS大幅提高。

压力机CPU 80~90%

(一) 问题7台压力机,总计预计发送750笔报文/秒,但发现只能发出来500多笔报文/秒。

继续从PC的任务管理器->资源监视器,CPU、内存、网络、磁盘的分析入手。

这次,我们发现每台压力机CPU 80~90%,也就是说,磁盘IO的问题解决之后,CPU又变成了下一个瓶颈。

(二) 分析

这种情况下,一般是代码占用了过多的CPU。

分析代码发现,每一次性能测试工具的迭代(线程被调用),这个线程只处理一个MQ消息,即处理一个MQ消息需要打开、关闭一次MQ队列,这个打开、关闭队列是非常消耗CPU的。

(三) 解决

每次性能测试工具的迭代(线程被调用),让这个线程处理多个MQ消息。

问题来了,并不是每次迭代处理的越多越好,每次处理多少个MQ消息合适?

我们采用了 “当前队列深度”和“指定参数”的最小值。

为什么不是“当前队列深度”:设置为“当前队列深度”即每次迭代处理这个队列中所有的报文。那么如果队列深度很大(比如深度是100),这个线程要顺序处理这些消息,比较慢,其他线程得不到消息去处理,性能测试工具发挥不了并发处理的优势。

如果设置一个参数(比如10),每个线程每次最多处理10个消息,那么其他线程就有机会得到消息去并发处理。

因此,我们采用了 “当前队列深度”和“指定参数”的最小值。

(四) 效果

调整代码之后,预计发送750笔报文/秒,实际也真的发出来750笔报文/秒,不但如此,CPU由80-90%变为了30-60%,节约一半的CPU资源。

TPS提升50%,CPU降低一半,里外里,意味着TPS提升了200%(以前40%的CPU利用率支撑250TPS,现在是750TPS)

场景跑完后,压力机CPU变为100%

(一) 问题

场景跑的时候压力机 CPU 60-70%,跑完后,压力机CPU变为100%。

(二) 分析

这种情况一定是循环没有设置间隔。

或者是线程里面没有设置间隔,或者是线程的两次迭代之间没有设置间隔。经分析是线程的两次迭代之间没有设置间隔。

为什么最初没有设置间隔呢?因为这段代码的作用是实时抓取到达的报文并处理,如果设置间隔了就不那么实时了。

(三) 解决

设置间隔一定能解决这个问题,那么怎么设置呢?

1) 如果线程的两次迭代之间设置间隔,那么接收报文处理的环节就有一定的延时。不是我们想要的(人为的延长了响应时间)。

2) 在应用线程里面设置间隔。

如果有报文需要处理的时候,不设置时间延迟,实时抓取,没有报文的时候延迟20ms后再次读取队列。

处理方法为,判断队列深度,如果深度为0,则延迟20ms,不为0则不延时。

(四) 效果

修改代码后,场景跑完后CPU自然回落(100%变为10%以下)。

内存耗尽

(一) 问题

PC机(4G内存)执行测试时,只有200M剩余,鼠标键盘操作非常缓慢。

(二) 分析

性能工具的JVM是预分配的1.5G,但实际上并没有用那么多

(三) 解决

把性能工具所占的jvm内存从1.5G调为1G。

(四) 效果

调整后,系统显示有840M可用内存,鼠标键盘操作比较灵活

----------------

从上面的4个问题的描述、分析和解决可以看出,有些问题需要些产品的知识,有些问题需要些代码的知识,完成一个性能测试会遇到各方面的问题,性能测试人员必须是多面手。

作者:杨建旭,在自动化测试、性能测试方面有深入的研究,对虚拟化趋势下银行业系统的性能测试、问题分析、性能调优有丰富的经验。现任中国人民银行清算总中心性能测试团队负责人,高级技术经理。

社区专栏:系统性能测试 http://www.talkwithtrend.com/home/space.php?p=blog&uid=898849

测式小知识:

一场性能测试跑多长时间合适?

很多人一跑性能场景就跑1个小时以上,其实跑多久完全取决于系统特点。有些系统在大压力面前,几秒钟就可以调整到位,后面只要压力稳定,它的资源利用率、响应时间都是稳定的;对于这种系统,测10分钟足以。结果取下来,把前面几秒钟、后面几秒钟去掉,就可以采集数据了。

而对于数据库业务较复杂的场景,可能头10分钟的性能表现和后10分钟完全不一样。这种情况下,测试多久、数据取哪一段、要不要先给系统预热然后再正式测试都是要具体分析的。

去掉前端系统,直接压测后端,和真实情况有差异吗?

如果模拟的逼真,是没有任何差异的。那么问题来了,什么是模拟的不逼真?

举例1)生产环境某系统每秒处理100个事务,你如果采用性能测试工具,1个用户每秒发100个请求,可以模拟出系统每秒处理100个事务。但是,假如生产环境中这100个事务是由100个用户发起的,那么此时就有些差异了。首先,网络通道的连接数可能不一样,用户登录次数可能不一样,session的打开数量,数据库连接数,数据库启动的服务进程数等等都有可能不一样。

举例2)生产环境中每分钟处理60个业务,这60个业务是匀速达到的。而你如果在性能测试的时候,在第一秒钟把60笔业务都发出去了,后面59秒闲着。那么这个模拟也是非常不逼真的。返回搜狐,查看更多

责任编辑:

压力机测试软件,一个典型的测试压力机的性能调优过程相关推荐

  1. 软件测试人还知道大名鼎鼎的compuware性能调优工具吗?该公司撤离中国!

    笔者朋友是国内一家SaaS 公司的HR,年前突然发现,邮箱里竞争对手 - 全球最大应用性能管理(APM)服务供应商之一的Compuware的员工的简历突然猛增,仔细一打听,原来Compuware突然宣 ...

  2. 压力机的性能调优过程

    性能测试过程中,不仅仅是对被测系统的性能问题定位.分析.优化,很多时候负责批量请求发起的压力机也存在各类性能瓶颈.毕竟用几千块钱的机器就想把几个亿的机器压瘫也是稍稍需要点技术的. 这里介绍一次典型的压 ...

  3. 软件测试方法进行调优,软件测试中性能调优的过程解析

    0e7i$ME*D-E6~0性能调优无疑是个庞大的话题,也是很多项目中非常重要的一环,性能调优的难做是众所周知的,毕竟性能调优涵盖的面实在是太多了,在这篇文章中我们蜻蜓点水般的来看看性能调优这项庞大的 ...

  4. java面试 系统调优_面试官:Java性能调优你会多少?一个问题就把我问的哑口无言,哭了!...

    一.前言 什么是性能调优? 性能调优其实很好理解,就是优化硬件.操作系统.应用之间的一个充分的协作,最大化的发挥出硬件的极致性能,来应对高负载的业务需求. 为什么需要性能优化? 其实说到底就是两个原因 ...

  5. 英语中学生测试软件,中考英语口语测试软件.doc

    中考英语口语测试软件 中考英语口语测试软件 篇一:2014中考英语口语考试模拟试题 2016年全国中考英语口语考试要求大纲 一.朗读(5分) 给你50秒钟时间准备朗读.当听到"开始录音&qu ...

  6. 国家普通话水平测试官方手机软件,普通话测试软件 – 免费手机普通话测试软件,用手机模拟测试普通话水平[Android]...

    不管是应聘.交涉还是等级考试,一口流利标准的普通话将是必不可少的一给配备,中国方言众多你是不是改不了自己的家乡口音呢?不妨试试免费的普通话水平测试软件帮助您学习普通话. 普通话测试 是一款专门用来模拟 ...

  7. 网上的普通话测试软件可信吗,普通话测试软件哪个好_普通话测试软件靠谱吗_不要钱的普通话测试软件...

    核心提示:普通话测试的软件有很多,哪些普通话测试软件是我们想要的呢,下面多特小编就跟您推荐几款比较合适的软件或者app给您参考 普通话测试的软件有很多,哪些普通话测试软件是我们想要的呢,下面多特小编就 ...

  8. Linux操作系统的性能将主要取决于,高校邦Linux操作系统安全与性能调优章节测试答案...

    高校邦Linux操作系统安全与性能调优章节测试答案 答案: 更多相关问题 银行风险中的国家风险不包括().A.政治风险B.市场风险C.社会风险D. 银行业从业人员在使用本行电子技术设备时可以().A. ...

  9. Jmeter压力测试和性能调优

    1.压力测试的概念 压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能.可靠性.稳定性等 2.压力测试的目的 1)给出系统当前的性能状况 ...

最新文章

  1. 病毒及***防御手册之一
  2. 【转】JavaScript事件顺序
  3. memcached mysql 性能测试_memcached +mysql+php 测试例子
  4. [Google Guava] 1.1-使用和避免null
  5. python闭环最短路径_python实现最短路径的实例方法
  6. Linux一键部署duckchat,宝塔面板部署DuckChat(翻译:鸭信)- 一个简约好用的网络聊天平台...
  7. NoSQL-MongoDB with python
  8. leetcood学习笔记-58-最后一个单词的长度
  9. java 日志技术_java 日志技术汇总(log4j , Commons-logging,.....)
  10. 【PTA】浙大版《C语言程序设计(第3版)》题目集
  11. 业界总结 | BERT的花式玩法
  12. Mac下的平铺式桌面 - Yabai
  13. *p++ 和 *++p
  14. vue i18n 多语言文本指定位置动态改变, 实现占位替换
  15. RV1126RV1109 buildroot 增加QT程序
  16. html 必应网搜索,教程:创建自定义搜索网页 - 必应自定义搜索 - Azure Cognitive Services | Microsoft Docs...
  17. 口语对话 谈判的基本技巧
  18. Leetcode题目分类指南(单独刷题或学习算法书籍配合使用)
  19. 产后修复治疗仪方案/案列/APP/网站
  20. php设置表单项,直接设置表单项-海豚PHP1.0.6完全开发手册-基于ThinkPHP5.0.10的快速开发框架...

热门文章

  1. Android 图片裁剪 (附源码)
  2. Shell脚本学习笔记——paste
  3. Java学习——基础知识之运算符和输入输出
  4. 计算机考试准考证尺寸标准
  5. 中小型企业HR如何做培训计划?
  6. 孕妇除甲醛用什么东西好 甲醛对孕妇影响多久
  7. 700行无用 纯 CSS 祝考生 金榜高粽《1_bit 的无用 CSS 代码 》
  8. 文本预处理的一些知识
  9. 省常中模拟 day1
  10. 1-2 四轴飞行器基本原理