理解 Linux 系统负载

发布于 2024-03-16 09:55:37 字数 3477 浏览 30 评论 0

一. 查看系统负载

如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了。

在 Linux 系统中,我们一般使用 uptime 命令查看(w 命令和 top 命令也行)。(另外,它们在苹果公司的 Mac 电脑上也适用。)

你在终端窗口键入 uptime,系统会返回一行信息。

这行信息的后半部分,显示"load average",它的意思是"系统的平均负荷",里面有三个数字,我们可以从中判断系统负荷是大还是小。

为什么会有三个数字呢?你从手册中查到,它们的意思分别是 1 分钟、5 分钟、15 分钟内系统的平均负荷。

如果你继续看手册,它还会告诉你,当 CPU 完全空闲的时候,平均负荷为 0;当 CPU 工作量饱和的时候,平均负荷为 1。

那么很显然,"load average"的值越低,比如等于 0.2 或 0.3,就说明电脑的工作量越小,系统负荷比较轻。

但是,什么时候能看出系统负荷比较重呢?等于 1 的时候,还是等于 0.5 或等于 1.5 的时候?如果 1 分钟、5 分钟、15 分钟三个值不一样,怎么办?

二. 一个类比

判断系统负荷是否过重,必须理解 load average 的真正含义。下面,我根据"Understanding Linux CPU Load"这篇文章,尝试用最通俗的语言,解释这个问题。

首先,假设最简单的情况,你的电脑只有一个 CPU,所有的运算都必须由这个 CPU 来完成。

那么,我们不妨把这个 CPU 想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过。(很显然,这座桥只能单向通行。)

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

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

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

系统负荷为 1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的 70%。以此类推,系统负荷 2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负荷 3.0,意味着等待上桥的车辆是桥面车辆的 2 倍。总之,当系统负荷大于 1,后面的车辆就必须等待了;系统负荷越大,过桥就必须等得越久。

CPU 的系统负荷,基本上等同于上面的类比。大桥的通行能力,就是 CPU 的最大工作量;桥梁上的车辆,就是一个个等待 CPU 处理的进程(process)。

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

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

三. 系统负荷的经验法则

1.0 是系统负荷的理想值吗?

不一定,系统管理员往往会留一点余地,当这个值达到 0.7,就应当引起注意了。经验法则是这样的:

当系统负荷持续大于 0.7,你必须开始调查了,问题出在哪里,防止情况恶化。

当系统负荷持续大于 1.0,你必须动手寻找解决办法,把这个值降下来。

当系统负荷达到 5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。

四. 多处理器

上面,我们假设你的电脑只有 1 个 CPU。如果你的电脑装了 2 个 CPU,会发生什么情况呢?

2 个 CPU,意味着电脑的处理能力翻了一倍,能够同时处理的进程数量也翻了一倍。

还是用大桥来类比,两个 CPU 就意味着大桥有两根车道了,通车能力翻倍了。

所以,2 个 CPU 表明系统负荷可以达到 2.0,此时每个 CPU 都达到 100% 的工作量。推广开来,n 个 CPU 的电脑,可接受的系统负荷最大为 n.0。

五. 多核处理器

芯片厂商往往在一个 CPU 内部,包含多个 CPU 核心,这被称为多核 CPU。

在系统负荷方面,多核 CPU 与多 CPU 效果类似,所以考虑系统负荷的时候,必须考虑这台电脑有几个 CPU、每个 CPU 有几个核心。然后,把系统负荷除以总的核心数,只要每个核心的负荷不超过 1.0,就表明电脑正常运行。

怎么知道电脑有多少个 CPU 核心呢?

cat /proc/cpuinfo 命令,可以查看 CPU 信息。 grep -c 'model name' /proc/cpuinfo 命令,直接返回 CPU 的总核心数。

六. 最佳观测时长

最后一个问题,load average 一共返回三个平均值:1 分钟系统负荷、5 分钟系统负荷,15 分钟系统负荷,应该参考哪个值?

如果只有 1 分钟的系统负荷大于 1.0,其他两个时间段都小于 1.0,这表明只是暂时现象,问题不大。

如果 15 分钟内,平均系统负荷大于 1.0(调整 CPU 核心数之后),表明问题持续存在,不是暂时现象。所以,你应该主要观察"15 分钟系统负荷",将它作为电脑正常运行的指标。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

小苏打饼

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文