目前我有一个程序占用了太多的CPU。
我怎么能限制它占用的CPU数量?
OS是Linux, Fedora 。
我无法修改该程序的源代码。
我需要的是一个Bash命令。
你可以尝试通过降低优先级来限制你的程序。 没有涉及的程序devise。
以“50%”CPU运行并不是那么有意义。 您希望程序在可用时使用每个可能的资源。 如果CPU没有做其他的事情,那么这个程序也可以充分利用它。 如果你想让这个程序真的什么都不做,你就必须修改源代码,并尽可能地暂停/hibernate。
你想要的是让其他一切都有更高的优先权。 看到漂亮的命令的手册页,运行在好19
另一种可能更有效的限制资源的方法是安装schedutils包,并使用SCHED_BATCH进程调度程序运行程序。
Setrlimit和合作…
#include <sys/resource.h> #include <sys/time.h> #include <unistd.h> int main () { struct rlimit rl; /* Obtain the current limits. */ getrlimit (RLIMIT_CPU, &rl); /* Set a CPU limit of 1 second. */ rl.rlim_cur = 1; setrlimit (RLIMIT_CPU, &rl); /* Do busy work. */ while (1); return 0; }
从这里
你正在寻找简单又快速的东西? 试试cpulimit程序 。 赶紧跑:
cpulimit name-of-program
瞧,这是有限的。
如果你不想修改程序,另一个选项是虚拟化。
如果你想限制一个进程的CPU,基于百分比的概念,考虑cpulimit 。
您可以使用高性能计时器在应用程序内手动进行时间切片,并测量顶级循环的每次迭代所花费的时间,然后在该循环中进行适当的睡眠(或纳秒睡眠)。 这不会直接关联到CPU的一个百分比,特别是跨机器,但它会限制程序所需的CPU资源。
看看控制组。
LWN有一篇关于他们的文章 。
Redhat,Fedora,CentOS有一个名为libcgroup的RPM包,它有几个方便的命令行工具,一个系统守护进程和一些configuration文件来pipe理控制组。
这是基于SourceForge上托pipe的libcg 。