1、简介
存储、内存和 CPU(中心处理惩罚器)等体系资源不足会极大地影相应用步调的性能。因此,监控这些组件至关告急。
与磁盘和内存差异,监控 Linux 体系上的 CPU 利用率并不那么简朴。在本文中,我们将相识怎样表明 CPU 指标并以人类可读的格式表现它们。
- CPU 负载与 CPU 利用率
只管 CPU 负载和 CPU 利用率听起来很相似,但它们是不可互换的。CPU 负载定义为在单个时间点利用或等候利用一个内核的历程数。
假设我们有一个单核体系,我们的 CPU 匀称负载始终低于 0.6。这表明每个须要利用 CPU 的历程都可以立即利用它,而无需等候。假如 CPU 匀称负载大于 1,则体现有历程须要利用 CPU,但由于 CPU 不可用,现在无法利用。
但是,多处理惩罚器体系中高于 1 的匀称负载不会成为标题,由于有更多内核可用。
uptime下令为我们提供了以 1、5 和 15 分钟为隔断的匀称负载视图:
[root@localhost ~]# uptime 12:40:05 up 2:29, 1 user, load average: 0.37, 0.08, 0.03假如不知道体系的焦点数,就无法表明匀称负载:
# cat /proc/cpuinfo |grep corecore id : 0cpu cores : 1# cat /proc/cpuinfo |grep corecore id : 0cpu cores : 2core id : 0cpu cores : 2core id : 1cpu cores : 2core id : 1cpu cores : 2另一方面,CPU 利用率是 CPU 处理惩罚非空闲使命所耗费的时间百分比。CPU 利用率只能在指定的时间隔断内丈量。我们可以通过将空闲时间的百分比从 100 中减去来确定 CPU 利用率。
3.盘算CPU利用率
3.1 利用vmstat获取 CPU 利用率
vmstat下令近乎实时地表现 CPU 运动:
# vmstat 3 4procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 0 1347080 6120 941464 0 0 68 11 72 137 1 2 97 0 0 1 0 0 1347080 6120 941464 0 0 0 0 84 157 1 2 97 0 0 1 0 0 1347080 6120 941464 0 0 0 0 59 107 1 1 98 0 0 1 0 0 1347080 6120 941464 0 0 0 1 59 104 1 1 98 0 0CPU 下的列提供了处理惩罚器时间耗费在哪里的概览:
us –运行非内核代码所耗费的时间
sy -运行内核代码所耗费的时间
id –空闲时间
wa –等候 I/O 所耗费的时间
st -从假造机中偷取时间
id列是我们感爱好的。耽误一秒,我们利用 vmstat 盘算CPU利用率:
[root@localhost ~]# echo "CPU Usage: "$[100-$(vmstat 1 2|tail -1|awk '{print $15}')]"%"CPU Usage: 2%没有提供任何参数的vmstat下令将给出自引导以来的 CPU 时间。这不会提供精确的 CPU 利用百分比。因此,参数只能是 1 和 2,我们接纳一秒钟后盘算的指标:
# vmstat 1 2procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 299948 439704 2817632 0 0 24 80 0 1 3 1 96 0 0 0 0 0 299388 439716 2817624 0 0 52 0 12639 24736 1 1 98 0 03.2. 利用/proc/stat获取 CPU 利用率
CPU 运动也可以从/proc/stat文件中提取。该文件包罗自启动以来有关体系的各种指标:
#cat /proc/stat cpu 65367628 953 22932463 2375856549 2197237 0 1946432 0 0 0cpu0 17476419 247 6017418 592188525 448421 0 551235 0 0 0cpu1 15205823 274 5377711 595458052 609782 0 460967 0 0 0cpu2 17714818 235 6120189 592488511 582748 0 487777 0 0 0cpu3 14970567 195 5417144 595721459 556284 0 446450 0 0 0intr 19254483325 128 9 0 0 524 0 3 0 146 0 0 21 15 0 0 0 0 0 0 0 0 0 0 0 0 27 0 63657576 2 241449792 165587438 238303338 155312300 253683406 161946028 268992893 187313418 0 7268232 0 18751463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ctxt 173337668793btime 1648457167processes 57320268procs_running 2procs_blocked 0softirq 12000130905 1 1247219541 0 1075777327 82816139 0 5752561 2548585639 372991 2744639410第一行, 'cpu' 是体系全部焦点指标的聚合。在具有 4 个内核的体系上,将有 4条cpu线——cpu0、cpu1、cpu2和cpu3。' cpu ' 行中的列体现处理惩罚差异使命所耗费的时间:
user – 在用户模式下耗费的时间
nice – 在用户模式下处理惩罚 nice 历程所耗费的时间
system – 实验内核代码所耗费的时间
idle - 空闲时间
iowait – 等候 I/O 所耗费的时间
irq - 服务制止所耗费的时间
softirq – 服务软件制止所耗费的时间
steal —从假造机中偷取的时间
guest - 为来宾操纵体系运行假造 CPU 所耗费的时间
guest_nice – 为“不错的”客户操纵体系运行假造 CPU 所耗费的时间
我们将利用这些指标来盘算匀称空闲百分比。随后,我们将利用盘算值来盘算 CPU 利用率。须要留意的是,较旧的 Linux 发行版不盘算偷取、来宾或来宾_nice指标。假如我们利用的是旧体系,我们会在盘算中忽略这些指标:
匀称空闲时间 (%) = (idle * 100) / (user + nice + system + idle + iowait + irq + softirq +steal + guest + guest_nice)cat /proc/stat |grep cpu |tail -1|awk '{print ($5*100)/($2+$3+$4+$5+$6+$7+$8+$9+$10)}'|awk '{print "CPU Usage: " 100-$1}'CPU Usage: 2.4219由于我们正在开发单核体系,因此“cpu”行将与“cpu1 ”类似。因此,tail -1 的利用是 只检索此中一行。然而,我们会在多处理惩罚器体系上利用“ cpu ”行,由于它是全部内核上的指标的聚集。
3.3. 利用top获取 CPU 利用率
通常,top下令通常用于表现体系上的运动历程以及这些历程斲丧了多少资源。不外,我们可以利用这个下令来丈量 CPU 的状态:
# toptop - 07:08:31 up 2:41, 1 user, load average: 0.00, 0.00, 0.00Tasks: 322 total, 2 running, 320 sleeping, 0 stopped, 0 zombie%Cpu(s): 10.0 us, 15.0 sy, 0.0 ni, 97.8 id, 0.0 wa, 5.0 hi, 0.0 si, 0.0 stMiB Mem : 3709.4 total, 1483.1 free, 1402.0 used, 824.4 buff/cacheMiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2053.4 avail Mem -n选项是top下令在竣事前应该利用的迭代次数。我们制止利用第一个循环,由于我们检索的指标将是自启动以来的值。因此,我们举行了第二次迭代。
大概,在多处理惩罚器体系中,我们必须将给定的“ id”值除以内核数,然后从 100 中减去该值。比方,假如我们在四核体系上运行,而且“ id ”值为 304%,我们将 CPU 利用率盘算为:
CPU 利用率 % = 100 – (304/4)[root@localhost ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print "CPU Usage: " 100-($8/4) "%"}'4.结论
在本文中,我们讨论了 CPU 利用率和 CPU 负载之间的区别。很多人瓜代利用这两个概念,这是不精确的。之后,我们深入研究了用于检索 CPU 利用率指标的各种方法。
原文:https://www.baeldung.com/linux/get-cpu-usage |