USE方法是Linux系统性能分析中的一种系统性方法。
USE 方法定义:对于所有的资源,查看它的使用率(utilizations)、饱和度(saturation)和错误(errors)。
下面我们来看它如何作为一种工具在Linux平台上实践。
CPU-使用率
(1)系统层面
实时情况
![350cf8df9b67355749376f355efbd91b.png](https://i-blog.csdnimg.cn/blog_migrate/5d3d920568dd4574db6485e687b43730.jpeg)
使用mpstat命令看系统实时性能
为什么不用top?top命令本身的CPU消耗很大,比较慢,容易对线上服务本身产生影响。
历史情况
![1e94b4ccd11c3db1eb4bceb582540e21.png](https://i-blog.csdnimg.cn/blog_migrate/1620d518707d837509004c8b59536f42.jpeg)
使用sar命令看系统历史负载
如果想看以前的,可以用sar -f指定文件,文件一般在 /var/log/sa/sadd中。
修改采样频率:修改文件/etc/cron.d/sysstat
(2)进程层面
![25fa1d076a89906a44a607fc9adba5d7.png](https://i-blog.csdnimg.cn/blog_migrate/93ed7d8f1486d8af55dac3567cb6235d.jpeg)
使用pidstat命令查看进程负载
CPU使用率不高时,用top命令,输入shift-P按cpu使用率百分比从大到小排序
![ebb1b28cc7ea72443282b25ee0ddaf7e.png](https://i-blog.csdnimg.cn/blog_migrate/d635700b6fe18bccb6851b53d4d29e0a.jpeg)
使用top命令查看进程负载并按cpu使用率排序
CPU-饱和度
(1)系统层面
实时情况
![d822a73ecc6b383925cb7a1641c75f7c.png](https://i-blog.csdnimg.cn/blog_migrate/201544cb1d6dac3ccabf484b5706bb86.jpeg)
使用vmstat查看系统实时负载饱和度
r:系统正在运行或就绪(在排队)的任务数量
当r值大于cpu数量时,说明系统负载过高
历史情况
![fc87746697568431ccc0d6632e7ca227.png](https://i-blog.csdnimg.cn/blog_migrate/b098c08a8cac9f3ca692c45dcb71bae4.jpeg)
使用sar命令查看系统历史负载饱和度
(2)进程层面
暂无
内存-使用率
(1)系统层面
实时情况
![c7ec50d63eb95ac405cc65e069a7474f.png](https://i-blog.csdnimg.cn/blog_migrate/ad14fdf3eed87e80087a13ced509e390.jpeg)
使用free命令查看系统实时内存负载
Buffers:缓冲区高速缓存
Cached:页面缓存
实际可用内存: free + buffers + cached
历史情况
![9f554310c6a8d53811c89fe742477f35.png](https://i-blog.csdnimg.cn/blog_migrate/2e43ade5edd9a960b947f6b1a1c10eed.jpeg)
使用sar命令查看系统历史内存负载
(2)进程层面
![0b1811633eab06281ac271df025aaa6c.png](https://i-blog.csdnimg.cn/blog_migrate/211ad20ae99a74ca2fcbde342f639c0c.jpeg)
使用ps命令查看进程实时内存负载
负载不高时,使用top命令,输入shift-M按内存使用百分比从大到小排序
![80818643095f29f0b5eea72f3d42eedc.png](https://i-blog.csdnimg.cn/blog_migrate/131f43afe16c9add8b82cb7f469ced3d.jpeg)
使用top命令查看多个进程实时内存负载。
RES:驻留内存,即实际使用的内存
VIRT:虚拟内存,即申请使用的内存
SHR:共享内存
内存-饱和度
(1)系统层面
实时情况
![ef6c0901038683471ae43c6da81ac153.png](https://i-blog.csdnimg.cn/blog_migrate/935148b34fc3db338924b7d6f164b98a.jpeg)
使用vmstat查看系统内存实时饱和度情况
swap in/out有增加时表明系统内存不足
历史情况
![dfff8b2ad78f3fecc382b8907059e573.png](https://i-blog.csdnimg.cn/blog_migrate/a7d5bde20863ea0defbf0045edfd7361.jpeg)
使用sar命令查看系统内存历史饱和度情况
(2)进程层面
![ec9a40cf98647098fcdf5263495699fa.png](https://i-blog.csdnimg.cn/blog_migrate/597d0f91493b73317c3c84d0e4aa4602.jpeg)
使用proc文件系统查看进程内存饱和度情况
次要缺页率(min_flt):该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数
http://www.linuxidc.com/Linux/2010-12/30589.htm
存储IO-使用率
(1)系统层面
实时情况
![8c790964dae28f15aec879ae6ea1681f.png](https://i-blog.csdnimg.cn/blog_migrate/267de3be53856404dc719713251e19a8.jpeg)
使用iostat查看系统实时IO负载
%util:CPU用于处理IO请求的时间百分比,当达到100%时表示IO系统满负荷(对于RAID或SSD,即使超过100%也不代表IO系统繁忙)
http://www.fwqtg.net/iostat%E4%B8%AD%E5%85%B3%E4%BA%8Eutil%EF%BC%8Csvctm%E5%AD%98%E5%9C%A8%E7%9A%84%E9%99%B7%E9%98%B1.html
历史情况
![5f04bc85e51b1a7277e3237029e6b4c4.png](https://i-blog.csdnimg.cn/blog_migrate/d38be57a9d9b5e6005955ef4fabe52f8.jpeg)
使用sar命令查看系统历史IO负载
(2)进程层面
iotop命令
![22a3af67d4065646df324b73df268bd5.png](https://i-blog.csdnimg.cn/blog_migrate/bdef864b585481363f1f1b3787caf275.jpeg)
使用iotop查看进程实时IO负载
存储IO-饱和度
实时情况
![df1ea5598b715dca41ec5a9ec7f6fa97.png](https://i-blog.csdnimg.cn/blog_migrate/e231ad66f4289e44dd9341e9fb5170f1.jpeg)
使用iostat查看系统IO负载
avgqu-sz:在设备或请求队列中活跃的平均请求数
当此值大于1时或await较高时,表明IO系统请求已经过饱和了
历史情况
与查看“使用率”类似命令
存储-错误
暂无
网络接口-使用率
(1)系统层面
实时情况
![3fd9f26e428590eac115fe6fe53eee5d.png](https://i-blog.csdnimg.cn/blog_migrate/ce51e69a12b8a19492d0a5fef6fa6537.jpeg)
ifstat查看系统网络实时负载
![cb2f7a233064126b03b604cec7089092.png](https://i-blog.csdnimg.cn/blog_migrate/1e1552039131a398c3dbfd364169e7ae.jpeg)
sar查看系统网络实时负载
历史情况
![8c6bcca8634c02c08db855fd38af79a0.png](https://i-blog.csdnimg.cn/blog_migrate/9843d1368d95eecdfde5a382255e58a7.jpeg)
sar查看系统网络历史负载
(2)TCP连接层面
暂无
4.2 饱和度
(1)系统层面
![cb05744ba05fb2a95f6d70fefaea5152.png](https://i-blog.csdnimg.cn/blog_migrate/09c20b838e8d1f2c44f6b7b3dfa114fd.jpeg)
ifstat查看系统网络负载饱和读
(2)TCP连接层面
![d8548f79683788245222564571f3abe6.png](https://i-blog.csdnimg.cn/blog_migrate/64f7e2f1f87990639aa3a11f28a43310.jpeg)
netstat查看连接负载
LISTEN 状态: Recv-Q 表示的当前等待服务端调用 accept 完成三次握手的 listen backlog 数值,也就是说,当客户端通过 connect() 去连接正在 listen() 的服务端时,这些连接会一直处于这个 queue 里面直到被服务端 accept();Send-Q 表示的则是最大的 listen backlog 数值,这就就是上面提到的 min(backlog, somaxconn) 的值。
其余状态: 非 LISTEN 状态之前理解的没有问题。Recv-Q 表示 receive queue 中的 bytes 数量;Send-Q 表示 send queue 中的 bytes 数值。
http://jaseywang.me/2014/07/20/tcp-queue-%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98/