性能测试遇到问题?阿里年薪50W软件测试工程师,一招教你解决

2022年01月15日 阅读数:4
这篇文章主要向大家介绍性能测试遇到问题?阿里年薪50W软件测试工程师,一招教你解决,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

性能测试遇到问题怎么办?学会分析流程就不怕!‍

内存溢出java

堆内存溢出ios

现象:面试

(1)压测执行一段时间后,系统处理能力降低。这时用JConsole、JVisualVM等工具连上服务器查看GC状况,每次GC回收都不完全而且可用堆内存愈来愈少。数据库

(2)压测持续下去,最终在日志中有报错信息:java.lang.OutOfMemoryError.Java heap space。缓存

排查手段:服务器

(1)使用jmap -histo pid > test.txt命令将堆内存使用状况保存到test.txt文件中,打开文件查看排在前50的类中有没有熟悉的或者是公司标注的类名,若是有则高度怀疑内存泄漏是这个类致使的。网络

(2)若是没有,则使用命令:jmap -dump:live,format=b,file=test.dump pid生成test.dump文件,而后使用MAT进行分析。架构

(3)若是怀疑是内存泄漏,也可使用JProfiler连上服务器在开始跑压测,运行一段时间后点击“Mark Current Values”,后续的运行就会显示增量,这时执行一下GC,观察哪一个类没有完全回收,基本就能够判断是这个类致使的内存泄漏。并发

解决方式:优化代码,对象使用完毕,须要置成null。jvm

永久代 / 方法区溢出

现象:压测执行一段时间后,日志中有报错信息:java.lang.OutOfMemoryError: PermGen space。

产生缘由:因为类、方法描述、字段描述、常量池、访问修饰符等一些静态变量太多,将持久代占满致使持久代溢出。

解决方法:修改JVM参数,将XX:MaxPermSize参数调大。尽可能减小静态变量。

福利:关注并点击下方链接加我vx便可领取2022最新软件测试相关资料:学习资料、面试题、2021年底总结模板等等

查看评论区置顶消息

栈内存溢出

现象:压测执行一段时间后,日志中有报错信息:java.lang.StackOverflowError。

产生缘由:线程请求的栈深度大于虚拟机所容许的最大深度,递归没返回,戒者循环调用形成。

解决方法:修改JVM参数,将Xss参数改大,增长栈内存。栈内存溢出必定是作批量操做引发的,减小批处理数据量。

系统内存溢出

现象:压测执行一段时间后,日志中有报错信息:java.lang.OutOfMemoryError: unable to create new native thread。

产生缘由:操做系统没有足够的资源来产生返个线程形成的。系统建立线程时,除了要在Java堆中分配内存外,操做系统自己也须要分配资源来建立线程。

所以,当线程数量达到必定程度之后,堆中或许还有空间,可是操做系统分配不出资源来了,就出现这个异常了。

解决方法:

(1)减小堆内存

(2)减小线程数量

(3)若是线程数量不能减小,则减小每一个线程的堆栈大小,经过-Xss减少单个线程大小,以便能生产更多的线程。

CPU太高

us cpu高

现象:压测过程当中,使用top命令查看系统资源占用状况,us cpu太高,超过50%以上。

排查手段:

(1)使用top命令是哪一个进程消耗CPU高

(2)再找到CPU消耗高的线程:top -H -p 进程号

(3)把线程号转换成16进制:printf "%x\n" 线程号

(4)再用jstack命令分析这个线程是在干什么:jstack 进程号 | grep 16进制的线程号

(5)经过JProfiler的CPU Views视图的层层分析,能够清楚的找到形成CPU高的缘由

sy cpu高

现象:压测过程当中,使用top命令查看系统资源占用状况,sy cpu太高,超过50%以上。

排查手段:

(1)首先查看磁盘繁忙程度、磁盘的队列(iostat、nmon)

(2)若是磁盘没有问题,则使用strace查看系统内核调用状况

TPS上不去

网络带宽

在压力测试中,有时候要模拟大量的用户请求,若是单位时间内传递的数据包过大,超过了带宽的传输能力,那么就会形成网络资源竞争,间接致使服务端接收到的请求数达不到服务端的处理能力上限。

链接池

最大链接数太少,形成请求等待。链接池通常分为服务器中间件链接池(好比Tomcat)和数据库链接池(或者理解为最大容许链接数也行)。

垃圾回收机制

从常见的应用服务器来讲,好比Tomcat,若是堆内存设置比较小,就会形成新生代的Eden区频繁的进行Young GC,老年代的Full GC也回收较频繁,那么对TPS也是有必定影响的,由于垃圾回收时一般会暂停全部线程的工做。

数据库

高并发状况下,若是请求数据须要写入数据库,且须要写入多个表的时候,若是数据库的最大链接数不够,或者写入数据的SQL没有索引没有绑定变量,抑或没有主从分离、读写分离等,就会致使数据库事务处理过慢,影响到TPS。

硬件资源

包括CPU(配置、使用率等)、内存(占用率等)、磁盘(I/O、页交换等)。

压力机

好比Jmeter和Loadrunner,单机负载能力有限,若是须要模拟的用户请求数超过其负载极限,也会间接影响TPS(这个时候就须要进行分布式压测来解决其单机负载的问题)。

业务逻辑

业务解耦度较低,较为复杂,整个事务处理线被拉长也会致使TPS上不去。

系统架构

好比是否有缓存服务,缓存服务器配置,缓存命中率、缓存穿透以及缓存过时等,都会影响到测试结果。

性能问题分析流程

一、查看服务器的CPU、内存 、负载等状况,包括应用服务器和数据库服务器

二、查看数据库健康状态,数据库死锁、链接池不释放

三、查看项目日志(查看无报错现象)

四、查看jvm的gc等状况