如何永久设置给定进程的cpu限制。 Cpulimit和好不行

有许多类似的问题,但没有一个问题可以帮助我解决问题。

我在服务器上有ubuntu 11.10(它是桌面版)。 我有一个正在运行的网站。 有一个过程非常重要,但不必以高优先级运行。 我想永久限制进程的 CPU使用率,而不是用户。 这个过程由exec函数运行(它是php函数,而不是系统进程)。

所以我看到两个选项:1。每次执行函数时添加某种限制。 2.为此过程永久限制CPU使用率。

我试图使用“nice”和cpulimit,但似乎没有任何效果。 尼斯没有任何效果,cpulimit(用-e)说:“找不到目标进程”。

我很擅长,所以请假设我什么都不知道。

在没有要求的细节……

这是我在ubuntu上使用cgroup的方法。

在本文中,您需要将变量“$ USER”更改为运行该过程的用户

我添加了内存信息以及将成为常见问题解答,如果您不需要它,请不要使用它。

1)安装cgroup-bin

 sudo apt-get install cgroup-bin 

2)重新启动。 cgroups现在位于/sys/fs/cgroup

3)为您的用户创建一个cgroup(进程的所有者)

 # Change $USER to the system user running your process. sudo cgcreate -a $USER -g memory,cpu:$USER 

4)您的用户可以管理资源。 默认情况下,用户获得1024个CPU单位(份额),因此限制为大约10%的CPU,内存以字节为单位…

 # About 10 % cpu echo 100 > /cgroup/cpu/$USER/cpu.shares # 10 Mb echo 10000000 > /cgroup/memory/$USER/memory.limit_in_bytes 

5)启动您的过程(将exec更改为cgexec)

 # -g specifies the control group to run the process in # Limit cpu cgexec -g cpu:$USER command  & # Limit cpu and memory cgexec -g memory,cpu:$USER command  & 

组态

假设cgroup正在为你工作;)

编辑/etc/cgconfig.conf ,添加自定义cgroup

 # Graphical gksudo gedit /etc/cgconfig.conf # Command line sudo -e /etc/cgconfig.conf 

添加您的cgroup。 再次将$ USER更改为拥有该进程的用户名。

 group $USER { # Specify which users can admin (set limits) the group perm { admin { uid = $USER; } # Specify which users can add tasks to this group task { uid = $USER; } } # Set the cpu and memory limits for this group cpu { cpu.shares = 100; } memory { memory.limit_in_bytes = 10000000; } } 

您还可以指定组gid=$GROUP ,/ etc / cgconfig.conf得到很好的评论。

现在再次使用cgexec -g cpu:$USER command运行您的进程cgexec -g cpu:$USER command

您可以在/sys/fs/cgroup/cpu/$USER/tasks查看您的进程(通过PID)

bodhi @ ufbt:〜$ cgexec -g cpu:bodhi sleep 100&

[1] 1499

bodhi @ ufbt:〜$ cat / sys / fs / cgroup / cpu / bodhi / tasks

1499

有关其他信息,请参阅: http : //docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/