phu*_*ehe 25 performance limit
我有一个开发服务器,sshd有时会因为机器内存不足而停止工作。是的,我们的内存不足,升级现在不是一个可行的选择。我想要做的是告诉机器:“做任何你想做的事,但留下 20MB 和一些 CPU 给sshd!”。
那怎么办呢?
您可以通过将cgroups与Memory 资源控制器一起使用来实现类似的目标。
我猜您会将所有消耗资源的任务放在有限的 (CPU 和 RAM) 中cgroup,然后将其留在sshd“外部”以使其不受限制。
(添加更多交换,即使是交换文件的形式,也可能是一个不错的选择。)
哦,但是 cgroups 很容易 :) 安装 libcgroup 包。创建一个/etc/cgconfig.conf:
mount {
cpu = /cgroup/cpu_and_mem;
cpuacct = /cgroup/cpu_and_mem;
memory = /cgroup/cpu_and_mem;
}
group sshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
group nosshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
Run Code Online (Sandbox Code Playgroud)
启动cgconfig将创建层次结构、cgroups 并设置限制的过程。如果成功,您将拥有两个 cgroup,它们都分配了 50% 的 CPU 和 1G 可用内存(不知道您的实际可用内存量是多少;假设在此示例中为 2G)。现在您只需要将所有任务(即系统上运行的所有进程)从根组移动到 nosshd cgroup 中:
cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks
Run Code Online (Sandbox Code Playgroud)
然后您只需要获取sshd进程的 PID并将其移动到 sshd 任务文件中:
cgroup]# echo $PID >> sshd/tasks
Run Code Online (Sandbox Code Playgroud)
Ta-da,你完成了。您现在可以放心,sshd 将始终拥有 50% 的 CPU 和 1G 内存。