08-10 性能瓶颈证据链

内存 磁盘空间

[root@ZT-TEST ~]# df -h 文件系统容量已用可用 已用% 挂载点 devtmpfs3.9G03.9G0% /dev tmpfs3.9G03.9G0% /dev/shm tmpfs3.9G402M3.6G11% /run tmpfs3.9G03.9G0% /sys/fs/cgroup /dev/mapper/centos-root95G10G86G11% / /dev/sda11014M207M808M21% /boot tmpfs799M16K799M1% /run/user/42 tmpfs799M0799M0% /run/user/0

运行内存
[root@ZT-TEST ~]# free -g totalusedfreesharedbuff/cacheavailable Mem:702046 Swap:303 [root@ZT-TEST ~]# free -m totalusedfreesharedbuff/cacheavailable Mem:7982880285140842506394 Swap:409534092 [root@ZT-TEST ~]# free -k totalusedfreesharedbuff/cacheavailable Mem:8174056902304291943641795243523166547824 Swap:419430033684190932

虚拟内存(swap)
[root@ZT-TEST ~]# vmstat 1 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- rbswpdfreebuffcachesisobiboincs us sy id wa st 203368 29194004204 434812800010000 10000 003368 29192524204 4348128000017324010 9900 003368 29192204204 4348128000013921910 9900 003368 29192204204 4348128000012120810 9900

内存交换设置:
  • 查看 swappiness 比例:
[root@ZT-TEST ~]# cat /proc/sys/vm/swappiness 30

  • 临时修改 swappiness 比例:
sudo sysctl vm.swappiness=10

  • 永久修改 swappiness 比例:
vim /etc/sysctl.conf

  • 关闭 swap:swapoff -a
  • 开启 swap:swapon -a
瓶颈分析
命令: vmstat
[root@ZT-TEST ~]# vmstat 1 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- rbswpdfreebuffcachesisobiboincs us sy id wa st 203368 29194004204 434812800010000 10000 003368 29192524204 4348128000017324010 9900 003368 29192204204 4348128000013921910 9900

其中关于 IO 的几个指标解释如下:
  • bi:读磁盘的速度,单位 KB/秒
  • bo:写磁盘的速度
  • wa:IO 的时间
瓶颈分析:
  1. wa 并不能反应磁盘的瓶颈,实际反应的是 CPU 的 IO 等待时间
  2. bi+bo 参考值为 1000,如果超过 1000,而且 wa 值比较大,表示系统磁盘 IO 存在瓶颈
命令: iostat
[root@ZT-TEST ~]# iostat -x -k -d 1 Linux 3.10.0-957.el7.x86_64 (ZT-TEST)2021年10月03日_x86_64_(4 CPU)Device:rrqm/swrqm/sr/sw/srkB/swkB/s avgrq-sz avgqu-szawait r_await w_awaitsvctm%util sda0.000.020.000.230.112.2220.250.0158.405.3859.0313.860.32 dm-00.000.000.000.240.112.2118.710.0157.775.5858.3213.010.32 dm-10.000.000.000.000.000.0011.000.003.655.392.360.650.00### rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块 (block) 的请求进行合并 wrqm/s: 每秒对该设备的写请求被合并次数 r/s: 每秒完成的读次数 w/s: 每秒完成的写次数 rkB/s: 每秒读数据量 (kB 为单位) wkB/s: 每秒写数据量 (kB 为单位) avgrq-sz:平均每次 IO 操作的数据量 (扇区数为单位) avgqu-sz: 是平均请求队列的长度。队列长度越短越好 await: 平均每次 IO 请求等待时间 (包括等待时间和处理时间,毫秒为单位)。一般地系统 IO 响应时间应该低于 5ms svctm: 平均每次 IO 请求的处理时间 (毫秒为单位) %util: 1 秒中有百分之多少的时间用于 I/O 操作。该参数表示了设备的繁忙程度

瓶颈分析:
  1. CPU 会拿出一部分时间来等待 IO(iowait)。如果磁盘的利用率已经满了(util%),即使 CPU 使用率不高,但是系统整体 QPS 已经上不去了,如果继续加大流量,会导致单次 iowait 持续增加(IO 请求都堵在队列里),从而使整体性能塌方
  2. 高 iowait 并不代表磁盘的瓶颈。唯一能说明磁盘是系统瓶颈的方法是很高的 svctm(IO 请求的处理时间),一般来说超过 20ms,就代表了不太正常的磁盘性能。只要大于 20ms,就必须考虑是否磁盘读写的次数太多,导致磁盘性能降低
  3. svctm 一般要小于 await。svctm 的大小和磁盘性能有关,请求过多也会导致 svctm 的增加。await 的大小一般取决于 svctm 以及 I/O 队列的长度。如果 svctm 接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用的响应时间变慢,如果响应时间超过了用户可以容许的范围,需要考虑更换更快的磁盘;调整内核 elevator 算法;优化应用;升级 CPU
浏览器层面 关注白屏时间/首屏时间
08-10 性能瓶颈证据链
文章图片

接口层面
  • 并发测试
  • 负载测试
  • SQL 层
08-10 性能瓶颈证据链
文章图片

服务端层面 【08-10 性能瓶颈证据链】08-10 性能瓶颈证据链
文章图片

    推荐阅读