我有一个 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,您可以降低他们的优先级。