性能测试

转载 2015年07月07日 15:40:48

    今天研发同事找我配合进行系统的压力测试,目前的测试结果是并发500无限循环,tps 300,怎么也上不去,怀疑压力在oracle数据库。

    测试中发现数据库的系统压力在cpu上,虽然是64核的系统,但是vmstat的r列已经是80多了,大部分cpu的压力也很高(sar -P ALL),等待事件是latch: cache buffers chains。awr上显示平均等待40ms左右,可能问题

    (1)sql问题,逻辑读过多    -->  优化sql为主

    (2)热点块                          -->  主要考虑打散表中数据(调整pctfree或者分区)

    抓逻辑读过多的sql,果然部分走的是全表扫描。

    加索引后情况大为好转,ash显示主要事件集中在insert的cpu上了,再看看数据库的系统压力,没有,问题是并发测试还在300左右,现在初步判断瓶颈应该不在数据库上。本来与我无事了,看同事毫无思路,也跟着一起分析。

    舍去并发,1个并发1个事物,响应时间在37ms(一秒钟一个并发能响应1000/37~=27个),那并发11个就能达到300个的瓶颈了(11*27~=297个),但是前提是每个并发响应时间不衰减。

    测试(jmeter)15个并发,tps --> 200不到,说明整个系统的性能下降了不少了。

    因为我们测试是通过nginx的,查看nginx日志,大量响应码499,好吧,添加proxy_ignore_client_abort on参数,百度说是连续post,nginx拒绝。

    修改后测试,j_0068.gif,老样子。但是ngixn的日志中的响应时间显示测试开始响应在10ms左右,但是随着压力增大,响应时间慢慢增大,最后到了4s左右。

    客户端问题??本来是一台linux跑的jmeter,现在加一个分布式节点,如果真是jmeter问题,两台一起跑应该会好很多,结果是一台tps --> 170,另外一台 --> 130,排除这个问题。

    网络瓶颈或者容器设置问题??不太会,网络延时并不大,而且如果是这两样的话不应该前后的响应时间差别太大(测试时间10分钟),猜测是某个java容器随着压力慢慢到了资源极限,可能是cpu,也可能是mem,磁盘不太会毕竟容器跟磁盘交互还是比较少的。另提一点,压力测试中,小包为主考虑网络间的发送接受能力(类似于磁盘的iops,需要考虑长连接问题,网络延时问题,可以简单的用ab [-k] -n  -c 测试),如果以大包为主考虑带宽问题,当然部分机器还有网卡问题,记得DELL R720的网卡,redhat 5.4系统,流量一大网卡就会出问题,还要打补丁,唉,压力测试前网络和硬件测试还是很必要的。

    top命令监控所有java容器的主机,之前研发说系统压力没问题的,结果发现一个java进程cpu 330%,还有几个java是100%左右,这也叫系统压力没问题啊,我擦,问题的容器再加一个节点(nginx配置转发),tps --> 600,问题发现了,还是容器的问题,优化代码或者堆机器加节点吧。

    最后并发轻松到了1000,松了口气,再解决不了就打算tcpdump抓包分析了(这种方法很容易能发现事务各个节点的处理能力问题,当然如果研发能把测试脚本分开测试更直观,-个事务分割成n个,分别测试),同事很高兴的立即去跟领导回报说自己已经解决了系统压力问题,我也是醉了,跟我又没关系了,关机回家吧。

    案例很简单,测力能力有限,只是记录一下自己的思路,希望对别人有帮助,能够及时发现问题。

建议:

    (1)非专业人员测试的话(比如研发),最好能找来系统和数据库工程师一起看看,集思广益么

    (2)一开始就应该从系统压力入手,监控单个进程  top -p xxx 更有效(既能看到整体压力,又能看到单个进程的占用资源),io的话 iostat -xk xx xx基本就够了,当然习惯用nmon或者htop看个人了

    (3)如果是网络或者容器配置问题,测试中各个阶段性能变化应该不大

 转帖:美乐家

如何做性能测试

性能优化的常见概念 吞吐量(TPS, QPS):简单来说就是每秒钟完成的事务数或者查询数。通常吞吐量大表明系统单位时间能处理的请求数越多,所以通常希望TPS越高越好 响应时间:即从请求发出去到...
  • liweisnake
  • liweisnake
  • 2017年06月08日 22:40
  • 2066

性能测试应该怎么做?

偶然间看到了阿里中间件Dubbo的性能测试报告,我觉得这份性能测试报告让人觉得做这性能测试的人根本不懂性能测试,我觉得这份报告会把大众带沟里去,所以,想写下这篇文章,做一点科普。 首先,这份测试...
  • chenjian98306
  • chenjian98306
  • 2016年07月06日 14:53
  • 2728

我学习性能测试及工具的笔记

学习的目的: 1.制定性能测试计划方案 2.进行性能测试需求分析 3.测试脚本开发 4.场景设计 5.测试执行 6.结果分析   开始进入入门阶段的学习 一、性能测试基础知识(学习性...
  • zgnsjl
  • zgnsjl
  • 2014年06月17日 12:10
  • 1099

性能测试常见指标

1注册用户数         注册用户数指软件中已经注册的用户,这些用户是系统的潜在用户,随时都有可能上线。这个指标的意义在于让测试工程师了解系统数据中的数据总量和系统最大可能有多少用户同时在线。 ...
  • Tongdingsidong
  • Tongdingsidong
  • 2017年06月26日 17:29
  • 657

性能测试工程师职业现状分析

该报告汇总统计了包括猎聘、拉勾、智联、前程无忧、58同城、中华英才网等主流招聘网站近一周(2016.5.25-2016.6.01)发布的性能测试工程师的招聘信息,主要从对性能测试工程师的技能要求、岗位...
  • jhyxzsf
  • jhyxzsf
  • 2016年06月03日 10:27
  • 2667

性能测试的书

转载地址:  http://www.cnblogs.com/fnng/archive/2012/09/25/2703133.html 我所要介绍的这几本书都是国内作者出的,没...
  • u011138533
  • u011138533
  • 2017年04月13日 17:10
  • 513

性能测试面试题汇总(一)

Q1:什么是负载测试?什么是性能测试?   A1:负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试,例如,访问一个页面的响应时间规...
  • star890124
  • star890124
  • 2015年06月11日 16:58
  • 3511

性能测试高端发展方向

业界认为性能测试ROLE划分为 性能测试工程师(偏重编写性能测试脚本、性能测试执行) 和性能测试分析师 (偏重性能分析、系统调优,也需要更加广、深)的知识。根据个人的理解,性能测试高端发展有如下一些方...
  • phphot
  • phphot
  • 2008年03月11日 22:40
  • 729

第十一讲、jmeter性能测试实战-web程序

1、搭建AUT 第一步、下载所需文件     Discuz_***.zip------源码程序文件,是PHP程序,简体中文GBK的下载地址是http://download.comsenz.com/...
  • aisemi
  • aisemi
  • 2017年02月16日 21:46
  • 1340

第十三讲、jmeter分布式性能测试

1、为何进行分布式测试     一台计算机能运行的线程数是有限的,在1.4GHz~3GHz的CPU、1GB内存的JMeter测试机上,可以处理的Jmeter线程就只有100~300个。比如某个接口测...
  • aisemi
  • aisemi
  • 2017年02月17日 08:41
  • 439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:性能测试
举报原因:
原因补充:

(最多只允许输入30个字)