目录
前言:
性能测试是一个系统或应用程序在不同的负载和压力条件下运行的测试,以评估其在高并发访问或大数据量情况下的性能和稳定性。监控和分析性能测试的指标可以帮助我们了解系统的性能瓶颈,从而进行调优和优化,提高系统的响应时间、吞吐量和可伸缩性。
一、哪些因素会成为系统的瓶颈?
1、CPU,如果存在大量的计算,他们会长时间不间断的占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题,例如频繁的 FullGC,以及多线程造成的上下文频繁的切换,都会导致 CPU 繁忙,一般情况下 CPU 使用率<75% 比较合适。
2、内存,Java 内存一般是通过 jvm 内存进行分配的,主要是用 jvm 中堆内存来存储 Java 创建的对象。内存的读写速度非常快,但是内存空间又是有限的,当内存空间被占满,对象无法回收时,就会导致内存溢出或内存泄漏。
3、磁盘 I/O,磁盘的存储空间要比内存存储空间大很多,但是磁盘的读写速度比内存慢,虽然现在引入 SSD 固态硬盘,但是还是无法跟内存速度相比。
4、网络,带宽的大小,会对传输数据有很大影响,当并发量增加时,网络很容易就会成为瓶颈。
5、异常,Java 程序,抛出异常,要对异常进行捕获,这个过程要消耗性能,如果在高并发的情况下,持续进行异常处理,系统的性能会受影响。
6、数据库,数据库的操作一般涉及磁盘 I/O 的读写,大量的数据库读写操作,会导致磁盘 I/O 性能瓶颈,进而导致数据库操作延迟。
7、当在并发编程的时候,经常会用多线程操作同一个资源,这个时候为了保证数据的原子性,就要使用到锁,锁的使用会带来上下文切换,从而带来性能开销,在 JDK1.6 之后新增了偏向锁、自旋锁、轻量级锁、锁粗化、锁消除。
二、哪些指标做为衡量系统的性能
1、RT 响应时间,包括如下
1.1 数据库响应时间,即数据库操作的时间
1.2 服务端响应时间,服务端包括 Nginx 分发的请求所消耗的时间及服务端程序执行所消耗的时间。
1.3 网络响应时间,网络传输,网络硬件需要对传输的请求进行解析所消耗的时间
1.4 客户端响应时间,一般 Web、App 客户端,消耗时间可以忽略不计,但是如果客户端存在大量的逻辑处理,消耗的时间有能能就会变长。
2、TPS 吞吐量
2.1 磁盘吞吐量
IOPS(Input/Output Per Second)每秒的输入输出量,这种是单位时间内系统能处理的 I/O 请求数量,I/O 请求通常为读或写数据操作请求