我的目标:为用户提供一种限制资源的方法,如CPU、给定进程的内存(C++)。
所以有人建议我使用Cgroup,这看起来是一个理想的实用程序。
在做了一些研究后,我有一个担忧:
当我们使用memory.limit_in_bytes来限制给定进程的内存使用时,有没有办法处理进程中的内存不足异常?我看到控制组提供了一个名为"memory.oom_control"的参数,当启用该参数时,它会杀死请求超过允许内存的进程。禁用时,它只是暂停进程。
我想要一种方法让进程知道它请求的内存比预期的要多,并且应该抛出内存不足异常。这样,流程就可以优雅地退出。
cgroups提供这种行为吗?
cgroup在所有linux版本中都可用吗?我主要对RHEL 5+、CENTOS 6+和ubuntu 12+机器感兴趣。
感谢您的帮助。
感谢
我想要一种方法让进程知道它请求的内存比预期的要多,并且应该抛出内存不足异常。这样,流程就可以优雅地退出。
cgroups提供这种行为吗?
最近版本中的所有进程都已在默认的cgroup中运行。如果您创建一个新的cgroup,然后将流程迁移到新的cggroup中,那么一切都像以前一样工作,但使用新cgroup中的约束。如果您的进程分配的内存超过了允许的数量,它就会像当前一样出现ENOSPC或malloc故障。