我有一个24核服务器,用户通过SSH连接.
它们并不意味着它们运行像CPU,R这样的CPU程序,或者它们自己的脚本执行模拟或类似的事情.
有没有办法自动检测和杀死-9 CPU重进程?
解决方法
您应该使用cgroups来执行此操作.
请参阅“man cgrules.conf”和“man cgconfig.conf”.
Fedora上的systemctl的更高版本应该支持将用户直接粘贴到cgroup中,这样你就可以更好地做到这一点.
这不会限制CPU,因为如果有可用的CPU资源(没有人使用),它将使用所有CPU但是其他东西也要求CPU它将根据配置的“cpu”分配CPU的份额.分享“价值.
另外,正如建议在CPU时间上坚持ulimit将确保运行过程被给予一个cuculative数量的jiffies之前被杀死使用太多的CPU.这可能会对用户正在使用的长时间运行的流程产生负面影响,这些流程在很长一段时间内自然会积累一定数量的jiffies.
您还可以使用cgroup强制所有用户仅在您的某个核心上进行实时处理,这样您至少可以保证一个CPU是否被淹没,它对其余的操作系统进程没有负面影响.
CGroups也是限制内存使用的一种很棒的方法.你可以将它与pam_limits结合起来以防止叉轰炸.
编辑:我还应该指出我认为你的要求不一定相关.让1个进程占用100%的CPU并不一定是坏事,为其他进程提供运行时间. Linux上完全公平的调度程序无论如何都能保证这种行为.
如果CPU只是空闲,那么使用所有CPU的进程没有任何问题.您的问题只出现在多个进程要求CPU时间且其中一个进程占用CPU的情况下.这就是cgroup应该受益的地方,因为它允许你控制在CPU争用情况下你将分配不同进程的CPU时间.