我有一个24核心的服务器,用户通过SSH连接到。
这并不意味着他们需要运行像MATLAB , R或者自己的脚本那样的CPU程序来执行模拟或类似的事情。
有没有办法自动检测和kill -9 CPU重进程?
你应该使用cgroups来做到这一点。
请参阅“man cgrules.conf”和“man cgconfig.conf”。
Fedora上systemctl的后续版本应该支持将用户直接粘贴到cgroup中,这样你就可以更好地完成这个任务。
这不会限制CPU的意义,如果有可用的CPU资源(没有人使用),它将使用所有的CPU,但其他东西也要求CPU将分配一个共享的CPU基于configuration的“CPU。股份“的价值。
同样build议在CPU时间上加一个ulimit,可以确保正在运行的进程在使用太多的CPU之前被杀死。 这可能会对用户长时间运行的stream程产生负面影响,而这些stream程在很长一段时间内自然会积累一定的stream量。
你也可以使用cgroup来强制所有的用户只能在你的一个内核上运行,这样你至less可以保证一个CPU是否被淹没,对其余的操作系统进程没有负面的影响。
CGroups也是限制内存使用的好方法。 您可以将它与pam_limits结合起来,以防止叉式轰炸。
编辑:我也应该指出我认为你的要求不一定相关。 有1个进程使用100%的CPU不一定是坏的,提供给其他进程运行的时间。 Linux上完全公平的调度程序保证了这个行为。
如果CPU只是闲置一个进程使用所有的CPU没有错。 您的问题只在多个进程要求CPU时间,其中一个进程正在占用CPU。 这是cgroups应该受益的地方,因为它允许您控制在CPU争用情况下您将分配不同进程的CPU时间。
您可以使用PAM 限制用户资源使用情况。
我从来没有尝试过,所以我不知道如果它工作正常或不…