学习理解Linux系统负载

本文最后更新于2015年12月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

最近在写主机信息收集agent的时候发现很多之前没有考虑/注意到的知识点,系统负载就是其中一个(之前只是简单的知道服务器的平均负载越高,程序的运行耗时会越长,系统给人的感觉会越慢(真实情况也确实如此);服务器的平均负载越低,表明服务器的资源处于闲置状态的时间也越长,是一种资源浪费)。所以今天借着这个机会好好学习一下:系统负载的实际意义是什么?系统负载又是如何计算的?如何查看系统负载的情况?系统负载为多少时是正常、为多少时系统管理员又该注意了?

搜索关键字:
  • linux calc load
  • linux 负载 scoutapp
参考解答:
如何查看系统负载的情况?

究竟应该如何查看平均负载呢?最简单的命令是uptime:
[root@localhost ~]# uptime

还可以用w命令来查看,顺便可以查看一下系统当前有哪些用户,他们占用了哪些终端:
[root@localhost ~]# w

另外,还有动态命令top,这个命令也可以反映系统负载情况(第一行内容正是系统目前的负载情况):
[root@localhost ~]# top

另外还有一个最直接的显示系统平均负载的命令:
[root@localhost ~]# cat /proc/loadavg
0.10 0.06 0.01 1/72 29632

系统负载的实际意义是什么?

系统平均负载的基本解释:表示系统在过去一段时间(一般是1分钟、5分钟、15分钟)内进程队列中的平均进程数量

一个类比——行车过桥

假设你的电脑只有一个CPU,所有的运算都必须由这个CPU来完成。那么,我们不妨把这个CPU想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过。

系统负载为0,意味着大桥上一辆车也没有:

load_0

系统负载为0.5,意味着大桥一半的路段有车:

load_05

系统负载为1.0,意味着大桥的所有路段都有车,也就是说大桥已经”满”了。但是必须注意的是,直到此时大桥还是能顺畅通行的:

load_1

系统负载为1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的70%:

load_17

以此类推,系统负载2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负载3.0,意味着等待上桥的车辆是桥面车辆的2倍。总之,当系统负载大于1,后面的车辆就必须等待了;系统负载越大,过桥就必须等得越久。

单CPU的系统负载,基本上等同于上面的类比。

如果CPU每分钟最多处理100个进程,那么系统负载0.2,意味着CPU在这1分钟里只处理20个进程;系统负载1.0,意味着CPU在这1分钟里正好处理100个进程;系统负载1.7,意味着除了CPU正在处理的100个进程以外,还有70个进程正排队等着CPU处理。

为了电脑顺畅运行,系统负载最好不要超过1.0,这样就没有进程需要等待了,所有进程都能第一时间得到处理。很显然,1.0是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了。

对于多CPU来说,相当于有多个车道,系统可接受的最大合理负载也就翻了几倍。比如,2个CPU表明系统合理负载可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统合理负载最大为n.0。

系统负载又是如何计算的?

Linux系统负载的计算是个复杂的过程,一般情况下直接用w/uptime等命令的输出就行,别自己计算了。下面截取一下从Wiki百科中看到的系统负载的计算公式:

系统负载为多少时是正常、为多少时系统管理员又该注意了?

看系统负载(对系统性能的影响)不能仅仅看它的数值大小,还需要根据服务器的CPU核心数量来进行判断。比如,当前系统有4个逻辑CPU,如果load average的三个值长期大于4时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于4时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲。

如何得知我的系统装备了多少核心的处理器?在 Linux 下,可以使用命令:

获取你系统上的每个处理器的信息。如果你只想得到数字,那么就使用下面的命令:

一般情况下,单核平均负载在0.7以下是安全的,超过0.7就需要进行优化了。而且一般认为看负载情况看5分钟和15分钟的比较好。

单核负载是通过:

负载数值 / CPU核数

来估算的。

参考链接:

=EOF=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2582.html

《学习理解Linux系统负载》上有7条评论

  1. Linux环境下进程的CPU占用率
    http://www.samirchen.com/linux-cpu-performance/

    1、Linux 环境下查看 CPU 信息
    1.1、查看 CPU 详细信息
    1.2、查看多核 CPU 信息

    2、在 Linux 环境下计算进程的 CPU 占用
    2.1、通过 /proc/stat 文件查看所有的 CPU 活动信息
    2.2、通过 /proc/[PID]/stat 文件查看某一进程的 CPU 活动信息
    2.3、通过 /proc/[PID]/task/[TID]/stat 文件查看某一进程下的某一线程的活动信息

    2.4、单核情况下 CPU 使用率的计算
    2.4.1、基本思想
    2.4.2、计算总的 CPU 使用率 totalCPUUse
    2.4.3、计算某一进程的 CPU 使用率 processCPUUse
    2.4.4、计算某一线程的 CPU 使用率 threadCPUUse

    2.5、多核情况下 CPU 使用率的计算
    2.5.1、基本思想
    2.5.2、计算总的 CPU 使用率
    2.5.3、计算某一进程的 CPU 使用率 mProcessCPUUse
    2.5.4、计算某一线程的 CPU 使用率 mThreadCPUUse

    2.6、问题
    2.7、一个计算总的 CPU 占用率的小程序

    3、Linux 环境查看进程运行相关信息
    3.1、使用 ps 命令查看进程信息
    3.2、使用 top 命令查看进程信息

  2. Linux环境下进程的CPU占用率
    http://www.samirchen.com/linux-cpu-performance/

    进程cpu利用率计算方法:

    1、读取/proc/PID/stat文件:

    a、第13列(utime) + 第14列(stime) + 第15列(cutime) + 第16列(cstime) = procCpu1
    b、sleep 1s
    c、再次执行a步骤,计算得到procCpu2,进程这1s使用cpu时间为procCpu2-procCpu1

    2、读取/proc/stat文件

    获取这 一秒的总的cpu使用时间 totalCpuTime

    3、计算

    proc.cpu.percent = (procCpu2-procCpu1) *100.0 * 机器CPU核数 / totalCpuTime

  3. 理解 CPU 利用率
    https://www.jianshu.com/p/f595ee986b55
    http://man7.org/linux/man-pages/man1/top.1.html


    us, user: time running un-niced user processes

    sy, system: time running kernel processes

    ni, nice: time running niced user processes

    id, idle: time spent in the kernel idle handler

    wa, IO-wait: time waiting for I/O completion

    hi: time spent servicing hardware interrupts

    si: time spent servicing software interrupts

    st: time stolen from this vm by the hypervisor

    当CPU很闲时,它在做什么?(What’s a CPU to do when it has nothing to do?)
    https://lwn.net/Articles/767630/

发表评论

电子邮件地址不会被公开。 必填项已用*标注