C++ 使用Cgroup来限制资源

C++ 使用Cgroup来限制资源,c++,linux,memory,resource-management,cgroups,C++,Linux,Memory,Resource Management,Cgroups,我的目标是:为用户提供一种限制资源的方法,如CPU、给定进程的内存(C++) 所以有人建议我使用cgroup,这看起来是一个理想的实用程序 在做了一些研究之后,我有一个担忧: 当我们使用memory.limit_in_字节来限制给定进程的内存使用时,是否有方法处理进程中的内存不足异常?我看到控制组提供了一个名为“memory.oom_control”的参数,启用该参数后,它会终止请求超出允许范围的内存的进程。禁用时,它只是暂停过程 我想要一种方法让进程知道它请求的内存比预期的要多,并且应该抛出内

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

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

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

当我们使用memory.limit_in_字节来限制给定进程的内存使用时,是否有方法处理进程中的内存不足异常?我看到控制组提供了一个名为“memory.oom_control”的参数,启用该参数后,它会终止请求超出允许范围的内存的进程。禁用时,它只是暂停过程

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

cgroup是否提供这种行为

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

感谢您的帮助

谢谢

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

cgroup是否提供这种行为


最近版本中的所有进程都已在默认的cgroup内运行。如果您创建一个新的cgroup,然后将流程迁移到新cgroup中,则所有操作都与以前一样,只是使用新cgroup中的约束。如果您的进程分配的内存超出了允许的范围,它会像当前一样出现ENOSPC或malloc故障。

因此我使用cgcreate/cgdelete/cgclassify创建、删除任何现有进程并将其附加到控制组。但看起来这些命令需要root访问权限,对于我当前的非root用户,它不能直接工作。真的有必要成为root用户吗?当cgroup内存被超过时,我没有看到malloc失败。根据oom_控件的设置,进程被终止或暂停。我应该使用什么设置来获得malloc失败?@MetricCrapton,你找到答案了吗?@user1507435,没有,我们最终编写了一个单独的块内存管理器。