【问题标题】:How can a daemon stay active while using no memory?守护进程如何在不使用内存的情况下保持活动状态?
【发布时间】:2019-06-12 08:55:23
【问题描述】:

我在使用ps aux 命令时提出了这个问题。

在这里我可以看到有几个进程处于0% CPU 0% MEM 0 VSZ 0 RSS

如果一个守护进程不使用任何内存,为什么以及如何首先显示它?我有点理解 0% CPU 使用率意味着该进程当前未使用,但 0% MEM 是否意味着根本没有进程?

我想检查这是否是特定于系统守护进程的,所以我制作了一个简单的 C 程序,带有无限循环,没有任何变量。

void main()
{
        while (1){}
}

这一次 VSZ 和 RSS 有实际值,而 MEM 保持在 0%。

这里发生了什么?

【问题讨论】:

    标签: linux memory memory-management process ram


    【解决方案1】:

    %MEM 可能没有在您的系统上完整记录。关于ps 命令的AIX 手册说:

    %MEM

    计算为工作段数和代码的总和 内存中的段页乘以 4(即 RSS 值),除以 机器中使用的实际内存大小(以 KB 为单位)乘以 100, 四舍五入到最接近的完整百分点。这个值试图 传达进程正在使用的实际内存的百分比。 不幸的是,像 RSS 一样,它往往会夸大进程的成本 即与其他进程共享程序文本。此外,该 四舍五入到最接近的百分比会导致所有过程 在 RSS 值小于 0.005 倍实际内存大小的系统中 %MEM 为 0.0。

    正如您通过检查输出可能猜到的那样,已经应用了一些舍入。因此,如果值太低,则打印 %0.0。

    而且,这个衡量的是实际内存使用的百分比,这意味着它不反映进程的大小,而只反映进程的哪一部分实际映射到了实际内存。

    在您的第一种情况下,CPU 的 %0.0 仅表示该进程存在但实际上什么都不做,并且它可能处于等待状态(或消耗很小比例的处理能力),而不是“它当前不是正在使用”。在第二种情况下,您的进程处于活动状态,实际上它非常忙(这是%97.7 反映的),但它所做的很愚蠢(无限循环什么都不做)。

    要了解所有这些,您可以阅读有关进程状态、进程调度和虚拟内存的信息。

    【讨论】:

      【解决方案2】:

      虽然 Jean-Baptiste 的回答是正确的,但我相信在这种情况下更重要的是,您注意到的所有三个字段进程中的所有 0 内存都是内核线程。它们的内存都是内核内存,不会出现在 top 或 ps 上。您可以通过用括号封装的命令和不消耗 VSZ 列中的内存的进程来判断它是 linux 上的内核线程。 (该列基本上代表了可以被视为进程内存的所有内容。内核线程仅为 0,这只是因为它们没有正确报告其内存。

      另请注意,从 2018 年开始,耗时不超过 1 分 41 秒,这些工作都不是非常活跃。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多