如何永久设置给定进程的 CPU 限制。Cpulimit 和 nice 不起作用

如何永久设置给定进程的 CPU 限制。Cpulimit 和 nice 不起作用

有很多类似的问题,但没有一个能帮助我解决我的问题。

我在服务器上安装了 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/

相关内容