0

为了限制特定进程的内存资源,我们可以使用 ulimit 和 cgroup。

我想了解,如果使用 cgroup,我已经分配了大约 700 MB 的内存给进程 A,在具有 1 GB RAM 的系统上,而其他一些进程说 B,需要大约 400 MB 的内存。在这种情况下会发生什么?

  1. 如果进程 A 分配了约 750 MB 的内存,但只使用了 200 MB 的内存,那么进程 B 是否可以使用分配给 A 的内存?
  2. 如果没有,那么如何实现“将固定数量的内存分配给其他进程无法使用的进程”的场景?

编辑

是否可以为进程锁定物理内存?还是只能锁定虚拟机,使其他进程无法访问它?

有一个多媒体应用程序必须保持活动状态并且可以在内存方面使用最大的系统资源,我需要实现这一点。

谢谢。

4

2 回答 2

1

进程正在使用虚拟内存(不是 RAM),因此它们具有虚拟地址空间。另请参见setrlimit(2)(由ulimitshell 内置函数调用)。也许RLIMIT_RSS&RLIMIT_MEMLOCK是相关的。当然,您可以限制其他一些过程,例如使用RLIMIT_ASor RLIMIT_DATA,也许通过pam_limits(8) & limits.conf(5)

您可以使用mlock(2)将一些虚拟内存锁定到 RAM 中,这可以确保为调用进程保留 RAM。

如果你想提高性能,你也可以使用madvise(2) & posix_fadvise(2)

另请参阅ionice(1)renice(1)

顺便说一句,您可能会考虑使用像Xen这样的管理程序,它们能够保留 RAM。

最后,您可能错误地认为手动调优比精心配置的内核调度程序做得更好。

于 2015-11-16T09:07:55.330 回答
0

哪些其他进程将在同一系统上运行,如果其他多媒体程序需要其他进程正在使用的内存,您希望发生什么样的事情?

您可以权衡多媒体过程,因此 OOM 杀手只会在所有其他非必要过程之后将其作为最后选择。如果内核需要一些时间来杀死某些东西以释放内存,您可能会看到丢帧。

根据这篇文章,通过写入来调整进程的 oom-killer 权重/proc/pid/oom_adj。例如与

echo -17 > /proc/2592/oom_adj
于 2015-11-16T10:25:08.457 回答