Cgroup使用限制资源

Cgroup usage to limit resources

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

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

经过一些研究,我有一个问题:

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

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

cgroups 是否提供这种行为?

还有 linux 的所有版本都可以使用 cgroup 吗?我主要对 RHEL 5+、CENTOS 6+ 和 ubuntu 12+ 机器感兴趣。

感谢任何帮助。

谢谢

I want a way to let the process know that it is requesting more memory than expected and should throw out of memory exception. This is so that the process gracefully exits.

Does cgroups provide such kind of behaviour?

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