[root@localhost ~]# uptime 12:40:05 up 2:29, 1 user, load average: 0.37, 0.08, 0.03
如果不知道系统的核心数,就无法解释平均负载:[root@localhost ~]# cat /proc/cpuinfo |grep corecore id : 0cpu cores : 1
另一方面,CPU 使用率是 CPU 处理非空闲任务所花费的时间百分比CPU 使用率只能在指定的时间间隔内测量我们可以通过将空闲时间的百分比从 100 中减去来确定 CPU 使用率3.计算CPU使用率3.1 使用vmstat获取 CPU 使用率vmstat命令近乎实时地显示 CPU 活动:[root@localhost ~]# vmstat 3 4procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st4 0 0 1347080 6120 941464 0 0 68 11 72 137 1 2 97 0 01 0 0 1347080 6120 941464 0 0 0 0 84 157 1 2 97 0 01 0 0 1347080 6120 941464 0 0 0 0 59 107 1 1 98 0 01 0 0 1347080 6120 941464 0 0 0 1 59 104 1 1 98 0 0
CPU 下的列提供了处理器时间花费在哪里的概览: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 2
3.2. 使用/proc/stat获取 CPU 使用率CPU 活动也可以从/proc/stat文件中提取该文件包含自启动以来有关系统的各种指标:[root@localhost ~]# cat /proc/stat cpu 3020 28 1863 22404 35 432 47 0 0 0cpu0 3020 28 1863 22404 35 432 47 0 0 0intr 96468 28 100 0 0 0 0 0 0 1 0 0 0 1263 0 0 0 3696 0 153 928 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 207 0 41 14600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 340950btime 1628404433processes 3276procs_running 2procs_blocked 0softirq 112867 1 16857 56 269 510 0 261 0 0 94913
第一行, '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 ($5100)/($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 的状态:[root@localhost ~]# 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
此外,需要注意的是,top 命令显示了单个内核的 CPU 百分比在多处理器系统中,CPU 百分比可能超过 100%例如,如果 4 个核心为 75%,top命令将显示 CPU 为 300%我们需要获取空闲时间的值,以便我们可以从 100 中减去它来获得使用情况:[root@localhost ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print \"CPU Usage: \" 100-$8 \"%\"}'CPU Usage: 2.2%
-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 利用率指标的各种方法(图片来源网络,侵删)
0 评论