【问题标题】:"nice" command not working on macOS“nice”命令在 macOS 上不起作用
【发布时间】:2017-12-02 08:17:55
【问题描述】:

我正在尝试使用 nice 运行一个正在使用所有处理器时间的特定进程:

sudo nice -n 20 someProcess

不幸的是,这并没有改变任何东西。在 Activity Monitor 中,它仍然占用 99% 的 CPU。

我怀疑这可能是因为没有太多事情发生,所以它完全可以使用那么多时间,所以我尝试了压力测试:

是 > /dev/null & 是 > /dev/null & 是 > /dev/null & 是 > /dev/null &

即使使用 nice -n 20,有问题的进程使用了​​ 99% 的 CPU,将四个“是”进程从 99% 降低到每个进程的 60% 左右。

我应该注意,我也尝试过类似地将“nice”与一个“yes”进程一起使用,但发现它根本没有区别……“yes”进程使用的处理器时间与所有其他进程一样多。

发生了什么事? “好”坏了吗?这是在 macOS 10.12.5 上完成的。

【问题讨论】:

  • 这个神秘的过程是什么?
  • 这有关系吗,因为我能够用“是”重现同样的事情?我认为将“nice”与“yes”一起使用会导致它比“yes”的其他实例使用更少的处理器时间,但情况似乎并非如此。
  • 有关于使用所有 CPU 的特定 macOS 进程的 SO 报告 - 每个都有不同的解决方案,所以我认为它可能是其中之一,但如果它不是你想要分享的东西,那很好.
  • 没有实际帮助,但是:(a) 也许您有四个 cpu(或八个虚拟核心)?这也适用于同时使用 90% 和 60% x4。 (b) yes 可能不是最好的测试对象,因为它是 I/O 而不是 CPU 密集型。
  • 您的问题解决了吗?我也有同样的问题

标签: macos nice


【解决方案1】:

很遗憾,原始海报是正确的,而 SEB 不太正确。

在不同的操作系统上,处理调度优先级的工作方式可能不同。

例如,在 Windows 上,如果优先级较高的进程要求足够的 CPU,则它们能够排除优先级较低的进程。例如,在四核系统上,以“正常”优先级运行的 4 个 CPU 绑定进程(或线程)可以完全排除“低于正常”或“低”优先级的 CPU 绑定进程,但“低”优先级进程可以获得如果没有其他人想要它,100% 的 CPU。我喜欢这种行为,因为我可以以“低”优先级运行受 CPU 限制的进程,只要我的所有其他(交互式)进程以“正常”优先级运行,我什至不会注意到它的存在. (假设没有一个进程占用太多 RAM --- 那是另一回事)。

在我使用过的所有 Unix 系统(包括 Linux)上,唯一可用的“优先级”方案是“nice”值,它比 Windows 上的系统不那么苛刻:具有高“nice”值的进程可以获得100% 的 CPU 是没有其他东西在使用 CPU,但它们会逐渐减少 CPU 并获得更高的友好度,但它们永远不会被完全排除在外。例如,根据我的经验,如果我有一个 4 核系统和 8 个 CPU 密集型进程,那么如果它们都具有相同的不错价值,那么每个进程几乎都能获得一个内核的 50%。但是,如果 4 是非 nice 并且 4 是 nice ,那么“nice'd” 将获得越来越少的 CPU 和越来越高的 niceness,但它们永远不会被完全排除:即使在 19 的最大 nice 值(或在某些系统上为 20),它们仍将获得至少 30-40% 的每个内核,而非 nice 的平均获得约 60-70%。这与 Windows 不同,但仍然合理。

另一方面,据我所知,在 MacOS 上“不错”绝对没有。我有一个 4 核的 Mac,如果我运行 8 个进程,其中一半是好的......他们每个人获得的 CPU 数量绝对没有区别。这是愚蠢。 MacOS 在这里完全搞砸了,即使他们有一个“不错”的程序,即使 OS 告诉我们不错的价值是什么(“ps -l”)。在我看来,他们要么诚实,要么完全删除功能,要么添加功能,让“nice”值真正有意义。

注意:如果有人能指出我的错误之处并告诉我是否有办法实际上降低进程的 CPU 优先级,我会欣喜若狂我想在后台运行。

【讨论】:

    【解决方案2】:

    答案是“你期望 Nice 做一些它没有做的事情”。

    Nice 不是这样工作的。 Nice 所做的只是改变流程的“优先级”。 这意味着,如果有两个进程需要 CPU,则将“nice”的进程放在第二个位置,而不是简单地以 FIFO 方式执行进程。这些参数都是关于确定系统应该以什么顺序为处理器安排什么。

    所以,如果没有其他东西在请求 CPU,那么你的“好”进程就会得到它。 这意味着,即使所有进程都“很好”,CPU 仍然可以 100% 运行。

    如果你想让一个进程不将 CPU 推到 100%,它必须有内置机制来防止它不断地请求它的命令被执行。休眠和暂停等待用户输入等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-27
      • 2020-02-12
      • 2012-08-21
      • 1970-01-01
      • 2022-12-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多