0

我的目标:为用户提供一种方法来限制给定进程 (C++) 的 CPU、内存等资源。

所以有人建议我使用看起来像一个理想实用程序的 Cgroups。

在做了一些研究后,我有一个担忧:

当我们利用 memory.limit_in_bytes 来限制给定进程的内存使用时,有没有办法处理进程中的内存不足异常?我看到控制组提供了一个名为“memory.oom_control”的参数,当启用该参数时,它会杀死请求比允许更多内存的进程。禁用时,它只会暂停该过程。

我想要一种方法让进程知道它请求的内存比预期的多,并且应该抛出内存异常。这是为了让进程优雅地退出。

cgroups 是否提供这种行为?

cgroup 也适用于所有版本的 linux 吗?我主要对 RHEL 5+、CENTOS 6+ 和 ubuntu 12+ 机器感兴趣。

任何帮助表示赞赏。

谢谢

4

1 回答 1

0

我想要一种方法让进程知道它请求的内存比预期的多,并且应该抛出内存异常。这是为了让进程优雅地退出。

cgroups 是否提供这种行为?

最近版本中的所有进程都已经在默认的 cgroup 中运行。如果你创建一个新的 cgroup,然后将进程迁移到新的 cgroup,一切都会像以前一样工作,但使用来自新 cgroup 的约束。如果您的进程分配的内存超出了允许的范围,它会像现在一样出现 ENOSPC 或 malloc 失败。

于 2015-04-15T13:57:31.713 回答