linux - 分配内存给其他进程不能在linux中使用的进程

标签 linux memory memory-management ulimit cgroups

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

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

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

编辑

是否可以为进程锁定物理内存?或者只有 VM 可以被锁定,以便没有其他进程可以访问它?

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

谢谢。

最佳答案

Processes正在使用 virtual memory (不是 RAM)所以他们有一个 virtual address space .另见 setrlimit(2) (由 ulimit shell 内置调用)。也许 RLIMIT_RSSRLIMIT_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 .

关于linux - 分配内存给其他进程不能在linux中使用的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33731636/

相关文章:

linux - zsh 下划线常用补全前缀

Android 内存类型(RAM v 内部存储器)

ios - HTTPNetStreamInfo::_readStreamClientCallBack(__CFReadStream*, unsigned long) 增加内存分配

memory-management - 如何使用基址寄存器、限制寄存器和重定位寄存器?

ios - 为什么 weak for property 和 __weak for instance variable 表现不同

linux - bash 通配符 n 位

linux - 更改 Eclipse 中的所有字体大小

php - 如何实现大批量的高性能批量图像转换?

c++ - 将大型成员对象移出类?

python - 在 Python 中读取 Parquet 时内存使用率过高