- 2021-10-20 发布 |
- 37.5 KB |
- 3页
申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
文档介绍
性能测试基础
第一个问题:sys cpu比较高,一般是什么原因,如何监控、分析与定位 提示:这个问题的关键是,cpu资源是有谁消耗的,学过操作系统原理的同事都知道,进程是申请cpu资源的最小单位,而线程是最小的执行单位所以重点需要关注线程在做什么 首先系统级别的监控: 1、linux的监控可以查看系统的cpu是否过高,如top命令、nmon、vmstat或者jvasualvm工具都可以; 2、通过pidstst -sw可以查看上下文切换是否频繁这是系统级别的监控 java的应用程序,重点监控java虚拟机,因为java的应用程序是运行在java虚拟机上面的,java虚拟机有很多监控工具,可以使用jdk自带的,如jstat,jps,jmap等等,还有其他的如jprofile、jvasualvm等,我一般用jvasualvm来监控,这个工具可以监控java应用程序的cpu、内存、线程、gc等重要信息 一般原因及问题分析: 1、应用程序中有复杂的算法,如递归调用; 分析与定位:通过jvasualvm中的cpu采样与快照可以快速获取最消耗cpu的方法; 2、系统存在频繁的上下文切换,如锁争用,IO线程切换等; 分析与定位:首先确定是否存在频繁的上下文切换,可以通过pidstat -cw来确认; 锁争用可以通过打印jvm的线程堆栈,查看是否有多个其它线程等待同一个锁,这个重点查看jvm的用户线程, IO线程切换,通过vmsta查看是否内存不足,是否启用了虚拟内存来确定,一般在应用程序做在主机,这种比较少见,一般出现在数据库服务器,可以通过查看最消耗io的sql语句来分析。 3、死锁 分析与定位:死锁,一般通过通过打印线程堆栈来确认,在线程堆栈中如果存在死锁,就出现a拥有b锁,同时申请c资源,以及d拥有c锁,同时申请b资源的现象。 4、频繁的fullGC; 分析与定位:这个可以通过jvasualvm中堆内存监控得到。 5、其他 分析与定位,其它问题,需要具体问题具体分析了。 第二个问题:jvm中内存泄露,如何监控,如何分析与定位 如何监控:这个上面已经描述过一部分了,jvasualvm可以做基本的内存监控,也可以通过jstat -gc来查看系统的系统情况,在jvasualvm中,如果发现每次内存回收后,堆内存的活跃数有增无减,且持续一段时间后,系统即使fullgc,也无法回收内存的时候,就会出现内存泄露了 如何分析与定位:这里有一个原理,你必须知道什么堆内存是不能回收的,专业的说法是,持续拥有gc root的对象是不能被回收的。通俗的说法是,没有其他的类引用这个对象,那么它就可以被回收了。明白这个原理之后,就好办了,我是通过jmap+ma来进行分析的,jmap可以拿到系统的堆内存的dump文件(有很多种工具可以拿到这个工具),ma可以分析出堆内存中,那些对象有内存泄露的嫌疑,且是拥有gc root的,同时它能分析出,是那些类引用了这些对象,这样就可以定位到具体的类,可以给开发最直接的指导与建议了。 第三个问题:线程堆栈看过没,如何确认锁竞争与死锁 死锁,一般通过通过打印线程堆栈来确认,在线程堆栈中如果存在死锁,就出现a拥有b锁,同时申请c资源,以及d拥有c锁,同时申请b资源的现象。 锁争用可以通过打印jvm的线程堆栈,查看是否有多个其它线程等待同一个锁,这个重点查看jvm的用户线程, 第四个问题:jvm堆内存结构,请简单描述一下 这个比较简单,jvm堆内存重要分为,年轻代和年老代,年轻代又分为e区、s0、s1三个区,这是java内存分析与java性能调优的基础,弄明白了jvm的内存结构,以及内存回收的过程,还有垃圾回收器有哪三种机制,就可以开始最基础的jvm内存调优了,这里简单描述一下jvm调优主要包括吞吐量调优,延迟调优,还有内存占用设置,跟细节的东西,这里就不描述了,大家可以在这个基础上去深入学习,都不难 第五个问题:需求分析中,如何确定并发数与吞吐量这两个指标 这个需要分两种情况: 第一种情况:如果是已经上线的应用,那么通过观察tomcat中的繁忙线程数与最大线程数来确定系统的并发数,性能测试过程中需要根据每个行业的不同,在实际测试过程中,需要乘以一个系数来作为性能测试的并发数,吞吐量(tps)这个参数可以通过观察分析系统pv量,已经pv量到tps之间的转换率来确定吞吐量。 第二种情况,如果是没有上线的应用,可以参考同类应用的情况来分析,重点是根据用户数,以及每个用户的在线时长,计算出平均在线用户数与并发数,这个只是一个大概值。吞吐量,也可以参考同类需求来分析。一般情况,没有上线的应用,我们都是测试系统的容量,然后和同类需求做比较,看是否达标。 第六个问题:如果发现数据库所在主机的I/O比较高,如何分析与定位问题 重点查看消耗IO的sql语句,数据库的性能问题,90%来源sql,所以sql的性能分析与调优,大家要重视在oracle端,我使用的是oracle的war报告,在mysql端,我重点查看slow.log与show processlist查看更多