如何阻止用户在服务器上运行占用大量 CPU 的程序?

如何阻止用户在服务器上运行占用大量 CPU 的程序?

我有一个 24 核的服务器,用户通过 SSH 连接。

它并不适合运行 CPU 占用高程序,例如MATLABR或者他们自己的执行模拟或类似操作的脚本。

有没有办法自动检测kill -9CPU 占用高大的进程?

答案1

您应该使用 cgroups 来执行此操作。

参见“man cgrules.conf”和“man cgconfig.conf”。

Fedora 上 systemctl 的后续版本应该支持将用户直接放入 cgroup,这样您就可以通过这种方式做得更好。

这不会限制 CPU,因为如果有可用的 CPU 资源(无人使用),它将使用所有 CPU,但是,如果其他东西也需要 CPU,它将根据配置的“cpu.shares”值分配 CPU 份额。

此外,正如建议的那样,对 CPU 时间设置 ulimit 将确保正在运行的进程在因使用过多 CPU 而被终止之前获得累计的 jiffies 数量。这可能会对用户正在使用的长时间运行的进程产生负面影响,因为这些进程在很长一段时间内自然会积累一定数量的 jiffies。

您还可以使用 cgroups 强制所有用户进程只在您的一个核心上运行,这样您就可以至少保证如果一个 CPU 不堪重负,它不会对其余操作系统进程产生负面影响。

CGroups 也是限制内存使用量的好方法。您可以将其与 pam_limits 结合使用,以防止 fork bombing。

编辑:我还应该指出,我认为您的要求不一定相关。 1 个进程占用 100% 的 CPU 并不一定是坏事,只要为其他进程提供运行时间。 无论如何,Linux 上完全公平的调度程序保证了这种行为。

如果 CPU 只是闲置,那么一个进程占用所有 CPU 并没有什么问题。只有当多个进程都要求 CPU 时间,并且其中一个进程占用了 CPU 时,才会出现问题。这时 cgroups 应该会发挥作用,因为它允许您控制在发生 CPU 争用时为不同进程分配多少 CPU 时间。

答案2

你可以限制用户资源与 PAM 一起使用。

我从来没有尝试过所以我不知道它是否正常工作......

相关内容