性能测试分析与调优

发布时间 2023-10-10 00:32:33作者: 鹿先森JIAN

Linux服务器性能查看分析调优 - 知乎 (zhihu.com)

步骤:

  • 确定问题。根据性能测试的结果来分析确定bug —— 测试⼈员职责
  • 分析原因。分析问题产⽣的原因 —— 开发⼈员职责
  • 给出解决⽅案。可以是修改软件配置、增加硬件资源配置、修改代码等 —— 开发⼈员职责验证解决⽅案。—— 测试⼈员回归测试
  • 分析验证结果 —— 既要保证有问题的指标得到解决,⼜要保证其他指标没有出现新问题
注意:性能分析和调优需要经过很多轮,才能最终解决问题。以上步骤是循环的。

性能测试监控关键指标

性能问题可以产⽣的 原因:

  • 服务器的资源 —— 影响应⽤服务器和数据库服务器处理的速率 和 ⽹络传输速率
  • JVM瓶颈分析 —— JAVA程序运⾏的环境
  • 数据库瓶颈分析 —— 数据库程序运⾏环境分析
  • 程序内部实现机制 —— 开发⼈员编写的代码分析
  • 压测机 —— 影响性能结果

硬件服务器资源指标

服务器的硬件

CPU内存磁盘外设(键盘、⿏标、显示器、散热器、机箱)

运行速度从快到慢:CPU >> 内存 >> 磁盘

存储空间从大到小:磁盘 >> 内存 >> CPU

vmstat、sar、iostat 检测是否是CPU瓶颈

free、vmstat 检测是否是内存瓶颈

iostat 检测是否是磁盘I/O瓶颈

netstat 检测是否是网络带宽瓶颈

1. CPU

CPU:单位HZ,将CPU划分为若干个时间⽚,为每个程序分配对应的时间片,保证所有的程序占⽤时间片来串行执行。

CPU使⽤率 = 已使⽤的时间⽚ / 总时间⽚ * 100%

  • 已使⽤的时间⽚ = ⽤户CPU + 系统CPU
  • 总时间⽚ = ⽤户CPU + 系统CPU + 空闲CPU
  • ⽤户CPU:所有应⽤程序运⾏时消耗的CPU
  • 系统CPU:操作系统运⾏消耗的CPU

CPU监控命令:top  # CPU时间 = us + sy + id

测试的关注点:

  • CPU⾼时,需要确认是⽤户CPU⾼还是系统CPU
  • 如果是⽤户CPU⾼,需要进⼀步分析对应的应⽤程序的执⾏效率是否有问题
  • 如果是系统CPU⾼,需要进⼀步观察其他的资源(内存、磁盘、⽹络等)是否存在问题

2. 内存和虚拟内存

内存实际内存/物理内存,机器实际的内存空间,所有的程序运行都必须加载到内存中才能运行。
虚拟内存:⼀种虚拟化的技术。当内存空间不⾜时,从磁盘中读⼊数据,处理完成后写回磁盘,以此进行交换,保证在内存不足时,程序也能够运行。
注意:由于虚拟内存,实际上完成了数据在磁盘和内存之间的读写过程,磁盘的速度要远慢于内存时,因此当使⽤虚拟内存时,说明内存已经不⾜,可能存在问题

命令:

  • 查看总量:top
  • 查看虚拟内存的使⽤量:vmstat  # Virtual Meomory Statistics,虚拟内存统计
  • swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM
  • swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK

测试关注点:

  • 实际内存:查看内存使⽤百分⽐,检查是否超过80%
  • 虚拟内存:查看swap的siso是否为0,如果不为0,说明内存可能不足

3. 磁盘IO

关注是磁盘读入和写出的速度,不是磁盘大小。
命令:iostat -x 1 2  # 输入/输出统计,查看硬盘的I/O性能(每秒显示一次,显示2次)。-x:磁盘利用率。-c:CPU利用率。
%idle:空闲CPU的时间百分比。如idle小于70%,I/O的压力就比较大了,说明读取进程中有较多的wait。
await:平均每次设备I/O操作等待时间(毫秒)。svctm:平均每次设备I/O操作的服务时间(毫秒)
svctm ≈ await,表示几乎没有I/O等待,磁盘性能很好;await >> svctm,则表示I/O队列等待太长,系统上运行的应用程序将变慢, 此时可以通过更换更快的硬盘来解决问题。
%util:一秒中有百分之几的时间用于I/O操作。衡量磁盘I/O重要指标,如%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷工作,该磁盘可能存在瓶颈。

测试关注点:

  • %util⾼,说明磁盘⻓时间占⽤CPU在发送数据,说明磁盘传输速度不足,存在瓶颈
  • %iowait⾼,说明磁盘IO传输数据的任务很多,在等待,说明磁盘传输速度不足,存在瓶颈

4. ⽹络

关注是网络传输数据的速度。

命令:sar -n DEV 1 2  # -n DEV 查看当天从零点到当前时间的网卡流量信息。每秒一次,共2次

rxKB/s:每秒钟接收到的字节数。txKB/s:每秒钟发送出去的字节数

测试关注点:

  • 实际统计的发送速率和接收速率,与⽹络的总带宽进⾏对⽐,查看使⽤的百分⽐(如果⽆限接近100%,说明存在⽹络性能瓶颈)