我正在开发一些需要知道其自身最大可访问内存的软件。在 Linux 上,这取决于 cgroup。根据我收集的信息,进程可以读取/proc/self/cgroup
以确定其自身的当前内存 cgroup 之一。然而,实际上存在一个cgroup层次结构,并且一个进程受到其所有cgroup的限制。如何确定应用于当前进程的所有 cgroup 的最小可用内存?
例如,当使用 Slurm 时,cat /proc/self/cgroup
返回:
[...]
5:memory:/slurm/uid_3119/job_13759394/step_batch/task_0
[...]
因此,人们可能会认为这/sys/fs/cgroup/memory/slurm/uid_3119/job_13759394/step_batch/task_0/memory.limit_in_bytes
将显示适用的内存限制。然而,在这种情况下/sys/fs/cgroup/memory/slurm/uid_3119/job_13759394/memory.limit_in_bytes
是相关的 cgroup,因为它的限制性更强。在这种情况下,可以应用什么工作流程来找到最严格的内存限制?
我注意到似乎systemd
有很多与 cgroup 相关的实用程序,但我想避免任何有关系统的外部依赖性或假设,因为我的应用程序需要在任何可能的 Linux 系统上运行。