干货:性能测试相关问题及解决办法汇总(重要)

干货:性能测试相关问题及解决办法汇总(重要)

开始性能测试前需要了解的内容:

1、项目具体需求。

2、指标:响应时间在多少以内,并发数多少,tps多少,总tps多少,稳定性交易总量多少,事务成功率,交易波动范围,稳定运行时长,资源利用率,测哪些交易,哪些接口,测试哪些场景。

3、环境:生产环境服务器数量,测试环境服务器数量,按照资源配比得出测试指标。

4、协议:系统用什么协议进行通讯。

5、压力机数量:如果并发用户数太多,需要把压力发到不同的压力机,不然可能会存在压力机瓶颈问题,导致tps和响应时间抖动。

6、交易占比:分析线上日志得出tps占比。

7、系统架构:请求流经过哪些环节,压测时监控这些环节。

测试:

1、基准:一个用户迭代100次,关注响应时间,事务成功率100%。

2、负载:10个用户跑10分钟,关注响应时间,事务成功率100%。

3、容量:估算一个总tps,根据公式计算出每个交易的pacing和vu,获取系统最大处理能力(最优容量),再令外测出三个梯度作为对比(两组小于最优容量,一组大于最优容量),四组容量VU等差,tps等差,对比每组容量实际占比和测试占比(越接近越能模拟真实场景),关注响应时间,总tps,tps,事务成功率,AP cpu利用率,DB cpu利用率,线程死锁,数据库死锁。

其中响应时间应小于负载测试时间,总tps应约等于预估总tps(相差不超过10是正常的),每个交易的tps应接近预估总tps*占比,事务成功率100%,AP cpu小于60%,DB cpu小于80%。dump线程栈检测是否有线程死锁,查看数据库日志看是否有数据库死锁。

4、稳定性:采取最优容量的80%作为压力持续运行24小时,观察系统长时间运行的性能表现,关注响应时间,tps,总tps,事务成功率,交易总数,观察是否有内存溢出(堆溢出,栈溢出,持久代溢出),cpu利用率是否达标,mem是否不持续增长,是否能正常触发fullgc,gc时间,gc频率, fullgc时间,fullgc频率(重点关注,JVM调优就是为了减少fullgc频率)。

监控:

容量测试和稳定性测试时启动nmon监控。

压测中遇到的性能问题及解决办法:

一、容量测试过程中cpu过高

1、用vmstat实时监控cpu使用情况。很小的压力AP cpu却到了80%多,指标是不能超过60%。

2、分析是use cpu过高还是sys cpu过高,常见的是use cpu使用过高。

3、如果是sys cpu使用过高,先把消耗cpu最多的进程找出来(top命令),再找到该线程下消耗cpu过高的是哪几个线程,再把该线程转换成16进制,再用jstack命令来dump线程栈,看这个线程栈在调用什么东西导致use cpu过高。

二、内存溢出(堆溢出、栈溢出、持久代溢出)

1、堆内存溢出

1)稳定性压测一段时间后,LR报错,日志报java.lang.OutOfMemoryError.Java heap space。

2)用jmap -histo pid命令dump堆内存使用情况,查看堆内存排名前20个对象,看是否有自己应用程序的方法,从最高的查起,如果有则检查该方法是什么原因造成堆内存溢出。

3)如果前20里没有自己的方法,则用jmap -dump来dump堆内存,在用MAT分析dump下来的堆内存,分析导出内存溢出的方法。

4)如果应用程序的方法没有问题,则需要修改JVM参数,修改xms,xmx,调整堆内存参数,一般是增加堆内存。

2、栈内存溢出

1)稳定性压测一段时间后,LR报错,日志报Java.Lang.StackOverflowError。

2)修改jvm参数,将xss参数改大,增加栈内存。

3)栈溢出一定是做批量操作引起的,减少批处理数据量。

3、持久代溢出

1)稳定性压测一定时间后,日志报Java.Lang.OutOfMenoryError.PermGen Space。

2)这种原因是由于类、方法描述、字段描述、常量池、访问修饰符等一些静态变量太多,将持久代占满导致持久代溢出。

3)修改jvm配置,将XX:MaxPermSize=256参数调大。尽量减少静态变量。

三、线程死锁

1、容量测试压测一段时间后,LR报连接超时。

2、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。

3、jstack命令dump线程栈,搜索线程栈里有没有block,如果有的话就是线程死锁,找到死锁的线程,分析对应的代码。

四、数据库死锁

1、容量测试压测一段时间后,LR报连接超时。

2、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。

3、数据库日志中搜索block,能搜到block的话就是存在数据库死锁,找到日志,查看对应的sql,优化造成死锁的sql。

五、数据库连接池不释放

1、容量测试压测一段时间后,LR报连接超时。

2、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。

3、去数据库查看应用程序到数据库的连接有多少个( show full processlist),假如应用程序里面配置的数据库连接为30,在数据库查看应用程序到数据库的连接也是30,则表示连接池占满了。将配置改成90试试,去数据库看如果连接到了90,则可以确定是数据库连接池不释放导致的。查看代码,数据库连接部分是不是有创建连接但是没有关闭连接的情况。基本就是这种情况导致的,修改代码即可。

六、TPS上不去

1、压力大的时候tps频繁抖动,导致总tps上不去。查看是否有fullgc(tail -f gc_mSrv1.log | grep full)。

2、pacing设置太小也会导致tps上不去,对抖动大的交易多增加点用户即可。

3、tps抖动,单压抖动大的交易,发现很平稳,这时怀疑是不是压力太大导致,所以发容量的时候把压力最大的那只交易分到其他压力机,然后发现tps不抖动了。注意:多台压力机只影响tps抖动,不会影响服务器的cpu。

4、看响应时间有没有超时,看用户数够不够。

七、服务器压力不均衡(相差1%-2%是正常的)

1、跑最优容量的时候,四台AP只有一台cpu超过60%,其他三台都在60%以下。

2、查看服务器是否有定时任务。

3、查看是否存在压力机瓶颈。

4、是否存在带宽瓶颈(局域网不存在此问题)。

5、查看部署的版本,配置是否一样。

6、可能别人也在用这些AP,因为同一台物理机上有很多虚拟机,因为别人先用,资源被别人先占了。

八、fullgc时间太长

1、跑容量和稳定性的时候,出现LR报请求超时错误,查看后台日志是fullgc了,看LR几点报的错和日志里fullgc的时间是否对应,fullgc会暂停整个应用程序,导致LR前端没响应,所以报错,这时可以减少old代内存,从而减少fullgc时间,减少fullgc时间LR就不会报错,让用户几乎感觉不到应用程序暂停。

2、四台AP轮流着full gc(部分server fullgc,其他server也会fullgc),这时可以制定策略让不同的server不同时fullgc,或者等夜间交易量少时写定时任务重启服务。

注意:

服务器日志为error下测试。

服务启动后几分钟内发压压力会很大,最好是服务启动两三分钟后再开始跑压力。

原文地址:https://www.cnblogs.com/111testing/p/11863290.html

时间: 2024-11-01 12:45:51

干货:性能测试相关问题及解决办法汇总(重要)的相关文章

Unity3d导出Android的apk文件时相关问题的解决办法

[狗刨学习网] 今天上午着手将一个unity3d开发的小游戏build到android手机上运行,结果遇到了不少问题. 首先遇到的第一个问题是在build到一半的时候,弹出如下报错: Error building Player: UnityException: No platforms found Android SDK does not include any platforms! Did you run Android SDK setup to install the platform(s)

无法启动MYSQL服务”1067 进程意外终止”解决办法——汇总及终极方法

自己一开始按照百度经验里的方法--<MySQL下载安装.配置与使用(win7x64)>去安装和配置,但是到后面步骤总是出现1067代号的错误.慢慢折腾去解决. 这里汇总各种导致mysql提示无法启动MYSQL服务"1067 进程意外终止"的一些解决办法.自己遇到这个问题是查了很多方法不行,最后看到一个论坛的讨论,试了一下竟然可以.一下是网上的部分方法,最后可以的那个方法我放在最后面: 启用MySql服务的时候出现"windows无法启动mysql服务(位于本地计算

DotNetCore.1.0.1-VS2015Tools.Preview2.0.3 相关问题及解决办法

本月16号,MS发布了 .NET Core 1.1.作为一个用贯MS产品的小盆友,我第一时间就把相关的安装包下载下来了,然后果断安装(入坑). 我猜你来看这篇博客可能遇到了和我一样的问题. 问题0:正确的安装顺需 正确的顺序在MS的dotnet Core官网上可以找到,请根据自己的VS版本对号入座. 如果你觉得这个太长或者存在疑问,简短的版本是: 1.VS2015 1. 检查VS2015 是否已经安装了Update3.3:打开VS2015,然后点击[帮助]-[关于Microsoft Visual

php(LAMP)开发环境配置相关问题及解决办法

相信很多像我一样初次接触到php开发的人,在配置基本的开发环境时都是一头雾水,为此小编特写下自己在安装配置php开发环境过程中遇到的一些问题,及解决办法. 1.LAMP组合,安装centons+apache+php+mysql LAMP:既linux+Apache+mysql+php黄金组合的简称,本人对linux不是很熟悉,配置该环境,实属项目需要,所以,在安装上述各种无法时都采用了新手最容易上手的安装方式,yum安装方法.好了,废话不多说,让我们来看重点. step0.centos的安装 本

用vue-cli创建的项目没有webpack相关文件的解决办法

第一次使用vue-cli,版本是@vue/[email protected],按照官网上的教程: vue create my-project 发现生成的项目并没有webpack相关的文件, 也就是说没有集成webpack 解决办法是先: npm install -g @vue/cli-init 然后: vue init webpack my-project 这样生成的vue-cli项目就有webpack配置文件了 原文地址:https://www.cnblogs.com/xianxiaobo/p

django 错误分类及解决办法汇总

问题1:TabError: inconsistent use of tabs and spaces in indentation tab和空格混用所致,例如: 解决办法:搜索\t,替换为'    ':

Vsftp问题及解决办法汇总(持续增加中)

1.VsFTP出现500 OOPS: cannot change directory的解决办法 在安装完vsftp服务后登陆时可能遇到cannot change directory后面是登陆者的目录的错误.这是因为SE设置的关闭了ftp的原因.可以使用下面的命令查看SE的状态 1 [[email protected] leon]# getenforce 2 Enforcing ----如果显示这个结果,那么SELinux就是打开的 可以通过setenforce 0关闭SELinux,关闭SELi

jboss7.1.1相关error及解决办法

问题1: 报错提示: 公司的网站系统使用的中间是jboss7.1.1 Final,由于有些数据和服务测试环境不具备,免不了要在测试环境调试些jsp页面,发现从jboss社区里下载的jboss应用有个问题,新增jsp页面会实时部署,修改过的jsp页面就无法正常部署. 解决办法: 第一步:在jboss7\standalone\configuration\standalone.xml文件中找到[subsystem xmlns="urn:jboss:domain:web:1.1"],添加加黑部

个人Android学习过程中问题及解决办法汇总

首先,你可能不小心看到了这一篇--没错,对Android开发我完全首次接触--所以遇到的问题都很简单的--(大部分解决办法摘选自stackoverflow) 一 忘截图了,新建项目后,没动任何代码,却各种保存.好吧,是因为SDK下载的不完全,比如默认的新建项目是Android 2.2的,然而我只下载了Android 4.0到6.0的--所以只用到Android SDK Manager上下载就好了,或者直接将默认的Minimum Required SDK设置成已经下载好的,比如我这里是4.0. 二