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 的时间
- wa 并不能反应磁盘的瓶颈,实际反应的是 CPU 的 IO 等待时间
- 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 操作。该参数表示了设备的繁忙程度
瓶颈分析:
- CPU 会拿出一部分时间来等待 IO(iowait)。如果磁盘的利用率已经满了(util%),即使 CPU 使用率不高,但是系统整体 QPS 已经上不去了,如果继续加大流量,会导致单次 iowait 持续增加(IO 请求都堵在队列里),从而使整体性能塌方
- 高 iowait 并不代表磁盘的瓶颈。唯一能说明磁盘是系统瓶颈的方法是很高的 svctm(IO 请求的处理时间),一般来说超过 20ms,就代表了不太正常的磁盘性能。只要大于 20ms,就必须考虑是否磁盘读写的次数太多,导致磁盘性能降低
- svctm 一般要小于 await。svctm 的大小和磁盘性能有关,请求过多也会导致 svctm 的增加。await 的大小一般取决于 svctm 以及 I/O 队列的长度。如果 svctm 接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用的响应时间变慢,如果响应时间超过了用户可以容许的范围,需要考虑更换更快的磁盘;调整内核 elevator 算法;优化应用;升级 CPU
文章图片
接口层面
- 并发测试
- 负载测试
- SQL 层
文章图片
服务端层面 【08-10 性能瓶颈证据链】
文章图片
推荐阅读
- 数据库|SQL行转列方式优化查询性能实践
- 性能测试中QPS和TPS的区别
- javascript|javascript 性能测试笔记
- 使用交叉点观察器延迟加载图像以提高性能
- golang锁竞争性能
- Linux性能分析-平均负载
- swoole打造高性能赛事直播平台1(准备工作)
- locust——python性能测试模块
- JavaScript|JavaScript 性能优化—学习笔记
- Crack|vectordraw图形库,提高了 WebGL 3D 渲染模式的性能