首页 理论教育 节点利用率查看与计算方法

节点利用率查看与计算方法

时间:2026-01-26 理论教育 小熊猫 版权反馈
【摘要】:在Linux系统中,CPU时间的分配信息保存在/proc/stat文件中,利用率的计算应该从这个文件中获取数据。图7-10/proc/net/dev文件数据使用iostat求I/O占用率iostat负责监控服务器设备的I/O负载压力,如查看系统处理某一I/O请求的耗时,进程I/O请求数量等。

(1)使用proc文件求CPU使用率

在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程、系统进程等需要执行的时候,CPU就执行系统缺省的空闲进程。从平常的思维方式理解的话,CPU的利用率就是非空闲进程占用时间的比例,即CPU执行非空闲进程的时间/CPU总的执行时间。

在Linux系统中,CPU时间的分配信息保存在/proc/stat文件中,利用率的计算应该从这个文件中获取数据。文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下分配的时间片(单位是Jiffies),这些数据是从CPU加电到当前的累计值。常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。“/proc/stat”文件数据如图7-9所示:

图示

图7-9 /proc/stat文件数据

第一行的数值表示的是CPU总的使用情况,下表7-2解析第一行各数值的含义(单位:jiffies):

表7-2 /proc/stat文件内容解析

图示

jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间。

因为/proc/stat中的数值都是从系统启动开始累积到当前时刻的积累值,所以需要在不同时间点t1和t2取值进行比较运算,当两个时间点的间隔较短时,就可以把这个计算结果看作是CPU的即时利用率。

CPU的即时利用率的计算公式:

CPU在t1到t2时间段总的使用时间=(user2+nice2+system2+idle2+iowait2+irq2+softirq2)-(user1+nice1+system1+idle1+iowait1+irq1+softirq1)

CPU在t1到t2时间段空闲使用时间=(idle2-idle1)

CPU在t1到t2时间段即时利用率=1-CPU空闲使用时间/CPU总的使用时间

(2)使用proc文件求内存利用率

查看Linux系统的内存使用情况,查看文件/proc/meminfo文件,使用MemFree字段来计算内存。/proc/meminfo文件内容如下所示:

图示

图示

字段解释:

MemTotal:所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)

MemFree:LowFree和HighFree的总和,被系统留着未使用的内存。

内存利用率可以表示为:

内存利用率=1-MemFree/MemTotal

(3)使用proc文件求带宽利用率

Linux提供的LKM机制可以使我们通过proc伪文件系统来获取Linux内核信息,而通过proc/net/dev我们可以实时获取网络适配器及统计信息。抛开复杂的概念,简单说就是可以利用proc/net/dev来获取网卡的网速及网络包的收发情况。这里主要关心Receive和Transmit项的bytes项,Receive代表输入字节数,Transmit代表输出字节数。(https://www.xing528.com)

网口传输速率为一段时间的Receive和Transmit的变化量,网络宽带占用率则是网口传输速率与当前接口的带宽的比值。通过cat/proc/net/dev采集两次,计算两次的流量差值,流量一般单位Gbps Mbps等。

带宽利用率=流量/带宽,其中流量指的是网卡流量,包括输入流量和输出流量,获取结果以bytes为单位,图7-10显示/proc/net/dev的文件数据。

图示

图7-10 /proc/net/dev文件数据

(4)使用iostat求I/O占用率

iostat负责监控服务器设备的I/O负载压力,如查看系统处理某一I/O请求的耗时,进程I/O请求数量等。通过运行iostat查看I/O各项基本信息,可以分析操作系统与进程在进行交互时I/O是否存在瓶颈的问题。

运行iostat后I/O负载情况如下所示:

图示

每一列的指标意义如下:

rrqm/s:每秒进行merge的读操作数目。即delta(rmerge)/s

wrqm/s:每秒进行merge的写操作数目。即delta(wmerge)/s

r/s:每秒完成的读I/O设备次数。即delta(rio)/s

w/s:每秒完成的写I/O设备次数。即delta(wio)/s

rkB/s:每秒读K字节数。是rsect/s的一半,因为每扇区大小为512字节。

wkB/s:每秒写K字节数。是wsect/s的一半。

avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。delta(rsect+wsect)/delta(rio+wio)

avgqu-sz:平均I/O队列长度。即delta(aveq)/s/1000(aveq的单位为毫秒)。

await:平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio)

svctm:平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio)

%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。即delta(use)/s/1000(use的单位为毫秒)

%util:在统计时间内所有处理I/O时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util=0.8/1=80%,所以该参数暗示了设备的繁忙程度。一般地,如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。但是如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈。

计算I/O占用率的部分代码如下所示:

图示

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈