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