我的服务器运行着几十个不受我控制的进程(主要是监控软件)。
根据我的应用程序日志,有时某些第三方进程会尝试分配太多内存,耗尽系统中剩余的所有 RAM 和交换区。在这种情况下,我的 Java 应用程序因 OOM 而崩溃。我可以使用一个简单的内存消耗脚本来重现这种情况。
由于我无法控制机器上运行的其他软件,我决定使用 cgroup 限制第三方进程可用的内存。这非常有效。
我的问题是识别操作系统/内核/关键系统进程并将其与第三方进程分开。
现在,我正在尝试查找第三方进程,并使用进程命令行中的一些常见路径模式将它们放入内存有限的 cgroup 中。
我想知道让我的应用程序在根 cgroup(无限内存)中运行并将所有其他进程(包括所有操作系统和内核进程)放置到 RAM 和 SWAP 限制为最大 1GB 的 cgroup 中是否可以? (实际上没有交换)
我希望 1GB 足以运行 RHEL 操作系统(内核 2.6.32-279.el6.x86_64),并且限制所有系统进程的可用 RAM 不会影响系统稳定性。