如何限制用户使用N个核心?

如何限制用户使用N个核心?

我有一个 SSH 服务器,用户登录后可以执行各种任务。问题是我有 4 个核心,而一个用户正在 4 个核心上运行任务。我该如何限制任何给定用户可以使用的核心数量?

这不是虚拟机。

更新:我正在阅读 /etc/security/limits.conf 并看到

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

我尝试进行此项设置,以便将用户限制为 3 个进程。但用户得到了

 -bash: fork: retry: No child processes

在他们的终端上。

我已经开始研究 ulimit 和配额

答案1

任务集(1)可能会对你有所帮助。它可以设置一个进程的核心数。您可以使用附记(1)获取目标用户的所有进程。例如,

housezet@arch: ~
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001

这将限制 housezet 的当前进程仅使用一个核心。如果限制 CPU 使用率也是可以接受的,你也可以考虑使用CPU限制(1)

答案2

我不相信有任何现有工具可以处理您的需求,因为这不是一件特别容易的事情。处理哪个进程去哪里不是在用户空间中完成的。

我能想到的唯一办法就是设置ulimit最大 CPU 时间,这样可以防止用户过度占用所有资源。您还可以更改用户的nice级别,因此如果某个用户占用了过多的 CPU,您可以降低他们的优先级。

相关内容