【问题标题】:Cgroup usage to limit resourcesCgroup 使用限制资源
【发布时间】:2015-06-20 14:48:25
【问题描述】:

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

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

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

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

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

cgroups 是否提供这种行为?

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

感谢任何帮助。

谢谢

【问题讨论】:

    标签: c++ linux memory resource-management cgroups


    【解决方案1】:

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

    cgroup 是否提供这种行为?

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

    【讨论】:

    • 所以我使用 cgcreate/cgdelete/cgclassify 来创建、删除任何现有进程并将其附加到控制组。但看起来这些命令需要 root 访问权限,对于我当前的非 root 用户,它不能直接工作。真的有必要成为root用户吗?
    • 超过 cgroup 内存时,我没有看到 malloc 失败。根据 oom_control 的设置,进程要么被杀死,要么被暂停。我应该使用什么设置来获得 malloc 失败?
    • @MetricCrapton,你找到答案了吗?
    • @user1507435,不,我们最终编写了一个单独的块内存管理器。
    猜你喜欢
    • 2020-09-06
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多