c++ - 使用cgroup来限制资源

标签 c++ linux memory resource-management cgroups

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

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

经过一些研究后,我有一个担忧:

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

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

cgroups 提供这种行为吗?

cgroup 是否在所有版本的 Linux 中都可用?我主要对 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 失败。

关于c++ - 使用cgroup来限制资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636725/

相关文章:

c++ - 最佳实践 : testing code which uses a random number generator

c++ - 由于为 C++ 程序调用 ulldiv.asm 而导致编译器引用错误

linux - INITRAMFS_IMAGE_BUNDLE 上的 Yocto Warrior 和 SD 卡镜像上的 Linux 内核镜像

Linux 内核无法从 USB 挂载 rootfs

node.js - 如何监控heroku(node.js)上的内存使用情况

Python Queue 在 get() 后不会释放内存

C++ 在 std::map 中存储对值的引用

php - brew install homebrew/php/php56 给我一个错误

c - 内存不足故障处理方法

c++ - 您可以将 vector<int64> 转换为 vector<uint8> 吗