如何限制资源使用量以节省特定进程的CPU + RAM?


25

我有一个开发服务器,sshd有时由于机器内存不足而无法正常工作。是的,我们的内存不足,现在升级不是可行的选择。我要告诉机器:“做任何您想做的事,但要留出20MB和一些CPU用于sshd!”。

那怎么办?


Sshd不应像这样被炸毁,它通常是一个表现良好的守护进程。确保将其更新为最新/最新的。你在干嘛 您是否正在通过它传递海量数据?
Marcin

2
@Marcin我认为我没有做任何大的事情,文字编辑。即使sshd表现良好,我认为如果没有足够的CPU / RAM使用,它也会卡住,不是吗?
phunehehe 2011年

当linux内存不足时,它将开始终止进程​​以回收内存。您可能会看到OOM正在运行(内存不足杀手)。我不知道为什么它会决定一贯杀死您的sshd。您是否曾见过sshd确实在泄漏之前大幅度泄漏(增大),还是一会儿工作正常而下一秒就死了?
Marcin

@Marcin很有可能是,如果他是OOM,那么系统就会陷入瘫痪,以至于sshd无法响应,这不是sshd问题,而是他的负载问题。不幸的是,我不知道答案。
xenoterracide

@phunehehe您确定问题出在ssh上没有内存并且您的负载不是通过屋顶吗?sshd会给出任何错误吗?盒子上的重量是多少?以及导致系统内存不足的原因。
xenoterracide 2011年

Answers:


9

您可以通过将cgroupsMemory资源控制器一起使用来实现类似目的

我猜您会将所有资源消耗性任务放在一个有限的位置(CPU和RAM)中cgroup,并留在sshd“外部”以免受到限制。

(尽管添加更多交换,即使是以交换文件的形式,也可能是个不错的选择。)


我仍然很犹豫,看起来并不容易(被Ubuntu破坏了)。
phunehehe 2011年

哦,这当然不容易:-)到目前为止,添加交换更容易。
Mat

@phunehehe欢迎成为系统管理员,这并不容易。但是现在您必须学习如何做不容易的事情。
xenoterracide 2011年

6

哦,但是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";
        }
}

开始cgconfig将创建层次结构,cgroup并设置限制的过程。如果成功,则您有两个cgroup,两个cgroup均分配了50%的CPU和1G可用内存(不知道您的实际可用内存量是多少;在此示例中假定为2G)。现在,您只需要将所有任务(即系统上正在运行的所有进程)从根组移至nosshd cgroup中:

cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks

然后,您只需要获取sshd流程的PID 并将其移动到sshd任务文件中即可:

cgroup]# echo $PID >> sshd/tasks

塔达,你完成了。现在,您可以放心,sshd将始终拥有50%的CPU和1G的内存。


1

用于renice提高的优先级sshd,或检查会计。(acct)->可以为用户设置资源,因此使用s运行sshd


我也将添加ionice到该内容中,并且很可能在开始sshd时不会对其进行后续处理。
xenoterracide 2011年

1

解决应用程序资源使用问题的一个更通用的解决方案是使用Docker在容器中运行应用程序。然后,您可以运行 CPU和内存使用量限制类似于cgroups的容器。

docker run -c=10 -m=1g my-container
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.