性能瓶颈诊断
- 了解应用系统
- 收集数据
在诊断性能问题前,需要了解应用系统的类型,包括并发度、写入量和高频查询语句。根据不同类型系统,缩小最可能的可疑点,重点收集和调优对应的指标。
并发读高的应用,重点分析CPU、内存相关
写入量高重点分析磁盘IO相关
高频查询语句可以通过SQL调优尝试
收集数据
收集数据的来源,通常分成两大类:一是数据库提供的信息,二是一些数据库之外的通用信息,最常见的就是操作系统层面的数据。
在系统压测过程中,分别收集以下各类性能指标:
- 通过快照命令,收集数据库集群性能指标,包括数据库连接数、数据读写、索引读写、增删改操作计数
- 通过操作系统命令,收集系统层面的性能指标,包括以下几类:
- CPU
- 磁盘
- 网络
使用 top 命令, 查看cpu使用情况
sy:内核占用cpu百分比。如果 us + sy 长期高于80% ,表明cpu资源不足,需要增加集群cpu资源。
wa:i/o等待占用cpu时间比,如果长期高于20%,说明i/o等待严重,可能的原因是磁盘的大量随机读写造成的,也可能是磁盘的读写瓶颈,可以通过磁盘I/O工具进一步进行诊断。
使用 iostat -xz 1 命令,查看服务器磁盘 I/O 情况:
sda 0.00 0.06 0.67 0.43 84.39 19.50 187.90 0.03 29.32 30.03 28.20 4.89 0.54
r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节),如果读写量已经达到磁盘硬件上限,说明磁盘的读写遇到瓶颈
await:I/O 操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括 I/O 等待和实际操作的耗时。如果这个数值过大,可能是磁盘 I/O 遇到了瓶颈。
%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过 60,可能会影响 I/O 性能(可以参照 IO 操作平均等待时间)。如果到达 100%,说明磁盘 I/O 已经饱和。
使用 vmstat 1 命令,查看服务器内存使用情况:
使用 sar -n DEV 1 命令,查看服务器网络设备的吞吐率:
02时43分02秒 ens33 1.08 1.08 0.06 0.17 0.00 0.00 0.00
使用命令 ethtool 查看网卡速率:
rxkB/s、txkB/s: 网卡接收和发送数据速率,如果接收或发送速率达到网卡上限,表明网络设备已经饱和。如示例输出中,ens33 千兆网卡,接收和发送速率上限为 125 Mbytes/s。如果遇到网络瓶颈,考虑使用万兆网或增加服务器数量,提升整体集群的网络吞吐能力
使用 sar -n TCP 1 命令,查看TCP连接状态:
02时59分21秒 0.00 0.00 1.00 1.00
active/s: 每秒本地发起的 TCP 连接数,即通过 connect 调用创建的 TCP 连接