有很多类似的问题,但没有一个能帮助我解决我的问题。
我在服务器上安装了 ubuntu 11.10(桌面版)。我有一个正在运行的网站。有一个进程非常重要,但不必以高优先级运行。我想永久限制 CPU 使用率用于进程,不适用于用户。该进程由 exec 函数运行(它是 php 函数,而不是系统进程)。
所以我看到 2 个选项:1. 每次执行函数时添加某种限制。2. 永久限制此进程的 CPU 使用率。
我尝试使用“nice”和 cpulimit,但似乎不起作用。nice 没有任何效果,而 cpulimit(带 -e)显示:“未找到目标进程”。
我还是一个初学者,所以请假设我几乎什么都不知道。
答案1
由于缺少所需详细信息...
以下是我在 ubuntu 上使用 cgroups 的方法。
在本文中,你需要将变量“$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 单元(份额),因此限制 CPU 的 10% 左右,内存以字节为单位...
# 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 <options> &
# Limit cpu and memory
cgexec -g memory,cpu:$USER command <options> &
配置
假设 cgroups 正在为您工作;)
编辑/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 <options>
您可以在以下位置查看您的进程(按 PID)/sys/fs/cgroup/cpu/$USER/tasks
例子
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/