linux的系统命令top、vmstat,mpstat都可以提供cpu相关的使用率(资源占用率)的数值,如何计算CPU的总的使用率?

目录

一、为何要知道CPU的总的使用率

1、性能监控与调优

2、问题排查

3、资源规划与容量管理

4、系统稳定性评估

5、自动化监控与报警

6、虚拟化环境管理

7、负载均衡决策

8、性能测试与基准测试

二、CPU总的使用率,是不是us(用户空间占用率)、sy(系统空间占用率)之和?

三、各种工具下cpu总使用率的具体计算

1. 使用 top 命令

2. 使用 vmstat 命令

3. 使用 mpstat 命令

4. 结论


一、为何要知道CPU的总的使用率

        在Linux系统中,了解CPU总的使用率是非常重要的,作为技术型的组织,经常会碰到如下一些情况,了解CPU的使用率非常重要。

1、性能监控与调优

         当怀疑系统响应慢或资源紧张时,检查CPU总的使用率可以帮助判断CPU是否成为瓶颈。如果CPU使用率持续接近100%,这可能意味着CPU资源不足,需要优化应用代码、调整系统配置或升级硬件。

2、问题排查

         如果系统出现无响应或性能下降,查看CPU总的使用率可以帮助快速定位是否有某个进程或服务占用了过多的CPU资源,从而导致系统性能下降。

3、资源规划与容量管理

        在规划服务器资源或扩展基础设施时,了解CPU的平均和峰值使用率有助于合理预测未来需求,确保有足够的CPU资源应对工作负载。

4、系统稳定性评估

        长期观察CPU总的使用率有助于评估系统的稳定性。突然的CPU使用率飙升可能是异常行为的指示,如病毒、恶意软件活动或服务故障。

5、自动化监控与报警

        在生产环境中,设置CPU使用率的阈值报警可以帮助系统管理员及时响应潜在的问题,避免服务中断。

6、虚拟化环境管理

         在虚拟化环境中,监控每个虚拟机的CPU使用率有助于优化资源分配,确保所有虚拟机都能获得足够的CPU时间。

7、负载均衡决策

        对于集群或分布式系统,了解每个节点的CPU使用率有助于做出负载均衡的决策,确保工作负载均匀分布。

8、性能测试与基准测试

        在进行性能测试时,记录CPU总的使用率有助于分析系统在高负载下的表现,以及与其他系统或配置的比较。

二、CPU总的使用率,是不是us(用户空间占用率)、sy(系统空间占用率)之和?

        在Linux系统中,top 或 vmstat 等工具显示的CPU使用率通常包括几个部分,这些部分共同描述了CPU的负载情况。其中,us(user space utilization)代表用户空间占用率,即CPU执行用户空间程序(如应用程序)的时间百分比;而sy(system space utilization)代表系统空间占用率,即CPU执行内核空间程序(如系统调用)的时间百分比。

        然而,要全面理解CPU的总使用率,我们需要考虑更多的因素。CPU的总使用率不仅仅是us和sy之和,还需要考虑其他几个重要的部分,主要包括:

  1. ni(nice):表示低优先级用户进程占用的CPU时间百分比。虽然这部分时间较少,但在某些情况下也需要考虑。
  2. id(idle):表示CPU空闲时间百分比。虽然这不是CPU“占用”的一部分,但在评估系统性能时非常有用。
  3. wa(iowait):表示CPU等待IO操作完成的时间百分比。这是系统等待磁盘、网络等IO操作完成的时间,虽然不是CPU直接执行指令的时间,但也会影响系统的整体响应能力。
  4. hi(hardware interrupts) 和 si(software interrupts):分别表示硬件和软件中断占用的CPU时间百分比。中断是系统处理外部设备或程序间通信的一种机制,它们也会占用CPU时间。
  5. st(steal time):在虚拟化环境中,这表示被虚拟化管理程序从该虚拟CPU上“偷走”的时间百分比,即该虚拟CPU在等待实际物理CPU资源时的时间。

        因此,如果要计算CPU的“总使用率”(即CPU忙碌的时间比例),理论上应该是us、sy、ni、hi、si和(在虚拟化环境中)st的总和,或者100%减去id(空闲时间)。在实际应用中,我们通常关注us、sy和iowait这几个关键指标,因为它们对理解系统性能瓶颈最为重要。

三、各种工具下cpu总使用率的具体计算

        在Linux系统中,top、vmstat、mpstat 等工具都可以提供关于CPU使用率的详细信息,但计算CPU总使用率的方式,可能会根据所使用的具体工具及其输出而有所不同。本文分别说明如何从这些工具的输出中计算CPU的总使用率。

1. 使用 top 命令

        在 top 命令的输出中,会看到类似这样的CPU使用率统计(这可能因版本而异):

top - 10:35:58 up 1 day,  3:00,  2 users,  load average: 0.00, 0.01, 0.05  
Tasks: 190 total,   1 running, 189 sleeping,   0 stopped,   0 zombie  
%Cpu(s):  30.3 us,  0.7 sy,  0.0 ni, 68.3 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st  
MiB Mem :   3947.6 total,   1257.5 free,   1376.3 used,   1313.8 buff/cache  
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   2252.2 avail Mem  
  
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND  
...

        这里的 %Cpu(s) 行显示了CPU的总使用率分解。

        为了计算CPU的总使用率,可以将用户空间占用率(us)、系统空间占用率(sy)、等待IO的占用率(wa)、硬中断占用率(hi)、软中断占用率(si)和虚拟化偷取时间(st,如果有的话)相加。

        在这个例子中,总的使用率大约是 30.3 + 0.7 + 0.0 + 0.0 + 0.0 + 0.7 =3 1.7%,但由于id(空闲)占用了大部分时间(68.3%),所以实际的总使用率很低。

        若对top命令感兴趣,可以参考以前的文章:
                《
Linux的命令top详解:系统动态监视工具

2. 使用 vmstat 命令

        vmstat 命令报告虚拟内存统计信息,包括CPU使用情况,vmstat 的输出中,虽然提供了CPU的使用情况,但它通常不直接给出总的CPU使用率,而是展示了CPU在不同状态下的时间百分比,如用户态(us)、系统态(sy)、空闲(id)等。可以像处理 top 的输出一样,将这些百分比相加(除了id和iowait,因为它们是未使用的时间),但通常我更关注于CPU的空闲时间或具体的工作负载(用户态+系统态)。

        运行vmstat 1(每秒更新一次),结果如下:

procs ----------------------- memory ---------------------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 3759360  97620 871844    0    0     3    10    2    2  20  0 100  0  0

        在这里,CPU的总使用率可以通过以下公式计算: 

总使用率 = 用户时间(us) + 系统时间(sy)

        所以,如果us是20而sy是0,那么总使用率就是20%。

3. 使用 mpstat 命令

        mpstat 是sysstat包中的一个工具,它提供了每个CPU或所有CPU的统计信息。在 mpstat 的输出中,可以看到每个CPU的使用率,包括用户态(%usr)、系统态(%sys)、空闲(%idle)等。为了计算总的使用率,可能需要查看所有CPU的%usr和%sys(或其他相关状态)的平均值或总和,这取决于具体需求。不过,mpstat 并不直接提供一个总体的CPU使用率百分比。

        mpstat 命令提供每个可用CPU的统计信息。运行命令:

                mpstat -P ALL 1(每秒更新一次)

        结果如下:

Linux 3.10.0-957.el7.x86_64 (mylocalhost)  2024年07月17日  _x86_64_ (4 CPU)

16时32:46  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
16时32:47  all    10.04    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.90
16时32:48    0    10.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00  100.00
...

        在这里,CPU的总使用率可以通过以下公式计算:

总使用率 = %usr + %nice + %sys + %iowait + %irq + %soft + %steal + %guest + %gnice

        查看all行,计算所有CPU的总和,然后用100减去%idle得到总使用率。

4. 结论

        每个工具都有其特定的输出格式和用途,但计算CPU总使用率通常涉及到将CPU在不同状态下的时间百分比相加(排除空闲和等待IO的时间)。注意,CPU的总使用率很少会达到100%,因为总有一些时间CPU处于空闲状态。在实际应用中,可能更关心的是CPU的特定方面(如用户态使用率)或整体负载情况(如load average)。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值