系统性能分析从入门到进阶

admin 2025-02-14 143人围观 ,发现180个评论


作者|勿非

本文以系统为中心,结合日常工作和用例,由浅入深地介绍了性能分析的一些方法和体会,希望对想了解系统性能分析的同学有所帮助。

一入门篇1资源角度

USE

产品跑在系统的各种资源上面,从系统资源的角度入门性能分析是个不错的选择,我们以业界知名大牛BranGregg的USE方法开始,USE特点就是简单有效适合入门,用Bran的话描述USE的效果:

Utilization(U):,"onediskisrunningat90%utilization".大多数情况可以合理推测利用率高可能会影响性能

Saturation(S):,"theCPUshaveanaveragerunqueuelengthoffour".资源竞争的激烈程度

Errors(E).,"thisnetworkinterfacehashadfiftylatecollisions".Errors相对直观

CPU

的利用率

Saturation.可以是loadaverage,runqueuelength,schedlatency等

CPU利用率用top看下:

top-17:13:49up83days,23:10,1user,loadaverage:433.52,422.54,438.70Tasks:2765total,23running,1621sleeping,0stopped,34zombie%Cpu(s):23.4us,9.5sy,0.0ni,65.5id,0.7wa,0.0hi,1.0si,0.0st

CPU利用率拆分成了更细粒度的几部分:

us,sys,ni-对应un-niceduser,kernel,niceduser的CPU利用率

id,wa-对应到idle,iowait的比例,iowait本质上也是一种idle,区别在于对应cpu上有等待io的任务

hi,si-对应hardirq,softirq的比例

st-因为超卖等原因,hypervisor从该vm偷走的时间(todo:docker)

继续看loadaverage,3个数值分别对应到系统1/5/15分钟内的系统平均load,load是个比较模糊的概念,可以简单认为是对资源有需求的任务数,包括oncpu,runnable的任务,也包括等待IO及任意D状态的任务.load使用采样的方式,每隔5秒采样一样,越近的采样权重越大,这样从1/5/15的趋势可以看出系统压力的变化。

loadaverage:433.52,422.54,438.70

在这台128个CPU的机器上,loadavg看起来有些偏高,但是具体影响目前不得而知,性能低是相对具体目标而言的,load高只是现象,它可能相关也可能无关,但至少是值得注意的。

再看下dstat关于任务状态的统计:

run-对应到/proc/stat里面的procs_running,也就是runnable任务数

blk-对应到/proc/stat里面的procs_blocked,阻塞在I/O的任务数

实际上和loadavg没有本质区别,只是load模糊了runnable和D状态,同时load使用1/5/15分钟的力度,而dstat可以使用更细粒度,如果只看某一时间点用load,如果要观察长时间的变化使用dstat(/proc/stat)。

free-gtotalusedfreesharedbuff/cacheavailableMem:50319372301301Swap:000

更详细的信息可以直接去读/proc/meminfo:

sar-B111:00:16AMpgscank/spgscand/spgsteal/s%vmeff11:00:17:00:18:00:19

I/O

存储I/O的USE模型:

Utilization.存储设备的利用率,单位时间内设备在处理I/O请求的时间

Saturation.队列长度

%util-利用率.注意即使达到100%的util,也不代表设备没有性能余量了,特别地现在的SSD盘内部都支持并发.打个比方,一家旅馆有10间房,每天只要有1个房间入住,util就是100%。

svctm-新版iostat已经删掉

await/r_await/w_await-I/O延迟,包括排队时间

avgrq-sz-平均requestsize,请求处理时间和大小有一定关系,不一定线性

argqu-sz-评估queuesize,可以用来判断是否有积压

rMB/s,wMB/s,r/s,w/s-基本语义

猜你喜欢
    不容错过