性能测试监控指标及分析调优

目录

一、哪些因素会成为系统的瓶颈?

1.1 CPU

1.2 内存

1.3 磁盘 I/O

1.4 网络

1.5 数据库

二、哪些指标做为衡量系统的性能

2.1 TPS 吞吐量

2.1.1  磁盘吞吐量

2.1.2  网络吞吐量

2.2 资源使用率

2.2.1 CPU 使用率

2.2.2 内存使用率

2.2.3 磁盘 I/O

2.2.4 网络 I/O

2.3 RT 响应时间

三、自下而上排查性能问题

四、自上而下优化性能问题

4.1 应用层调优

4.2 中间件调优

4.2.1 表结构与索引优化

4.2.2 SQL 语句优化

4.2.3 MySQL 参数优化

4.2.4 硬件及系统配置

4.3 系统调优

4.4 调优的策略

一、哪些因素会成为系统的瓶颈?

1.1 CPU

      如果存在大量的计算,他们会长时间不间断的占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题,例如频繁的 FullGC,以及多线程造成的上下文频繁的切换,都会导致 CPU 繁忙,一般情况下 CPU 使用率 < 75% 比较合适。

1.2 内存

    Java内存一般是通过jvm内存进行分配的,主要是用 jvm中堆内存来存储 Java 创建的对象。内存的读写速度非常快,但是内存空间又是有限的,当内存空间被占满,对象无法回收时,就会导致内存溢出或内存泄漏

1.3 磁盘 I/O

      磁盘的存储空间要比内存存储空间大很多,但是磁盘的读写速度比内存慢,虽然现在引入 SSD 固态硬盘,但是还是无法跟内存速度相比。

1.4 网络

     带宽的大小,会对传输数据有很大影响,当并发量增加时,网络很容易就会成为瓶颈。

1.5 数据库

     数据库的操作一般涉及磁盘 I/O 的读写,大量的数据库读写操作,会导致磁盘 I/O 性能瓶颈,进而导致数据库操作延迟。

二、哪些指标做为衡量系统的性能

2.1 TPS 吞吐量

2.1.1  磁盘吞吐量

      IOPS(Input/Output Per Second)每秒的输入输出量,这种是单位时间内系统能处理的 I/O 请求数量,I/O 请求通常为读或写数据操作请求,关注随机读写性能,适用于随机读写频繁的应用,如小文件存储,邮件服务器。 数据吞吐量,这种是单位时间可以传输的数据量,对于大量顺序读写频繁的应用,传输大量连续数据,例如视频编辑。

2.1.2  网络吞吐量

      指网络传输时没有丢帧的情况下,设备能够接受的最大数据速率。网络吞吐量不仅跟带宽有关系,还跟CPU处理能力、网卡、防火墙、以及 I/O 等紧密联系,吞吐量的大小由网卡的处理能力、内部程序算法以及带宽大小决定。

2.2 资源使用率

2.2.1 CPU 使用率

     首先可以先了解 CPU 的基本信息,包括物理CPU的个数、单个 CPU 的核数,然后可以通过命令查看CPU使用率,vmstat、mpstat、top

2.2.2 内存使用率

   命令:free -m、vmstat、top

2.2.3 磁盘 I/O

  命令:iostat、 iotop

2.2.4 网络 I/O

  命令:netstat、ifconfig、tcpstat

2.3 RT 响应时间

  • 数据库响应时间,即数据库操作的时间
  • 服务端响应时间,服务端包括Nginx分发的请求所消耗的时间及服务端程序执行所消耗的时间。
  •  网络响应时间,网络传输,网络硬件需要对传输的请求进行解析所消耗的时间
  • 客户端响应时间,一般 Web、App 客户端,消耗时间可以忽略不计,但是如果客户端存在大量的逻辑处理,消耗的时间有能能就会变长。

三、自下而上排查性能问题

     当进行压测之后,我们会输出一份性能测试报告,其中包括RT、TPS、服务器的CPU、内存、I/O,以及 JVM 的 GC 频率。通过这些指标可以发现性能瓶颈。我们可以采用自下而上的方式进行分析。

  • 首先从操作系统层面,查看系统的 CPU、内存、磁盘I/O、网络的使用率是否异常,再通过命令查找异常日志,最后通过日志分析,找到导致瓶颈的问原因。
  • 还可以从 Java 应用的 JVM 层面,查看 JVM 的垃圾回收频率以及内存分配情况是否存在异常,分析垃圾回收日志,找到导致瓶颈的原因。
  • 如果系统和 JVM 层面都没有出现异常情况,然后可以从应用服务业务层查看是否存在性能瓶颈,例如Java 编程问题,读写数据库瓶颈等。

四、自上而下优化性能问题

   整体的调优顺序,应用层调优 ----> jvm调优 ---> 操作系统层调优

4.1 应用层调优

      首先是优化代码,代码问题往往会因为消耗系统资源而暴漏出来,例如代码导致内存溢出,使 JVM 内存用完,而发生频繁的 FullGC,导致 CPU 偏高。其次是优化设计,主要是优化业务层和中间件层代码,例如可以采用代理模式,放在频繁调用的创建对象的场景里,共享一个创建对象,减少创建对象的消耗。再次是优化算法,选择合适的算法降低时间复杂度。

4.2 中间件调优

  主要介绍MySQL 调优

4.2.1 表结构与索引优化

   主要是对数据库设计、表结构设计以及索引设置维度进行的优化,设计表结构的时候,考虑数据库的水平与垂直的拓展能力,提前规划好将来数据量、读写量的增长,规划好分库分表方案。对字段选择合适的数据类型,优先选用较小的数据结构。

4.2.2 SQL 语句优化

    主要是对SQL 语句进行的优化,使用explain来查看执行计划,来查看是否使用了索引,使用了哪些索引。也可以使用 Profile 命令分析语句执行过程中各个分步的耗时。

4.2.3 MySQL 参数优化

    主要是对 MySQL 服务的配置进行优化,例如连接数的管理,对索引缓存、查询缓存、排序缓存等各种缓存大小进行优化

4.2.4 硬件及系统配置

    对硬件设备和操作系统设置进行优化,例如调整操作系统参数、禁用 swap、增加内存、升级固态硬盘。

4.3 系统调优

     首先是操作系统调优,Linux 操作的内核参数设置可以进行调优,已达到提供高性能的目的。
其次,JVM 调优,设置合理的 JVM 内存空间,以及垃圾回收算法来提高性能,例如,如果业务逻辑会创建大对象,我们就可以设置,将大的对象直接放到老年代中,这样可以减少年轻代频发发生 YongGC,减少 CPU 的占用时间。

4.4 调优的策略

      首先是时间换取空间,有的时候系统对查询速度要求不高,对存储空间要求较高,这个时候我们可以考虑用时间换取空间。

     其次是空间换取时间,用存储空间提升访问速度,典型的就是 MySQL 的分库分表策略,MySQL 表单数据存储千万以上的时候,读写性能就会下降,这个时候我们可以将数据进行拆分,以达到查询的时候,每个表的数据是少量的,以达到提升性能的目的。

参考文章:

性能测试监控指标及分析调优 | 京东云技术团队 - 京东云开发者的个人空间 - OSCHINA - 中文开源技术交流社区

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值