将内存分配给其他进程无法在linux中使用的进程

时间:2015-11-16 09:05:04

标签: linux memory memory-management ulimit cgroups

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

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

  1. 如果进程A被分配了~750 MB的内存但只使用了200 MB的内存,进程B是否可以使用分配给A的内存?
  2. 如果没有,那么当“将内存量固定分配给其他进程无法使用的进程”时,如何实现该方案?
  3. 修改

    是否可以为进程锁定物理内存?或者只能锁定VM以便其他进程无法访问它?

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

    感谢。

2 个答案:

答案 0 :(得分:1)

Processes正在使用virtual memory(不是RAM),因此他们有virtual address space。另请参阅setrlimit(2)(由ulimit shell builtin调用)。也许RLIMIT_RSS& RLIMIT_MEMLOCK是相关的。当然,你可以限制一些其他进程,例如使用RLIMIT_ASRLIMIT_DATA,或许通过pam_limits(8)& limits.conf(5)

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

如果您想提高效果,也可以使用madvise(2)& posix_fadvise(2)

另见ionice(1)& renice(1)

顺便说一下,您可以考虑使用像Xen这样的虚拟机管理程序,它们可以保留RAM。

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

答案 1 :(得分:0)

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

您可以对多媒体流程进行加权,因此OOM杀手只会在每个其他非必要流程之后选择它作为最后选择。如果内核需要一些时间来杀死内存以释放内存,你可能会看到一个丢帧。

According to this article,通过写信/proc/pid/oom_adj来调整流程的oom-killer权重。例如与

echo -17 > /proc/2592/oom_adj