我有一个与内存泄漏有关的查询。
一个基于 32 位 Linux 的系统正在运行多个活动进程 A、B、C、D。所有进程都在从堆中分配/释放内存。现在,如果进程 A 持续泄漏大量内存,是否会在一定时间后进程 B 无法从堆中找到任何要分配的内存?
据我了解,每个进程都从操作系统提供了一个 2GB 的唯一 VM。但是在虚拟机和物理内存之间有一个映射猪。
我有一个与内存泄漏有关的查询。
一个基于 32 位 Linux 的系统正在运行多个活动进程 A、B、C、D。所有进程都在从堆中分配/释放内存。现在,如果进程 A 持续泄漏大量内存,是否会在一定时间后进程 B 无法从堆中找到任何要分配的内存?
据我了解,每个进程都从操作系统提供了一个 2GB 的唯一 VM。但是在虚拟机和物理内存之间有一个映射猪。
是的,如果进程 A 耗尽了 VM 的总量(RAM + 交换空间),那么malloc
任何其他进程都可能因此而失败。Linux 对其他进程隐藏进程的内存空间,但它不会神奇地在您的机器中创建额外的内存。(尽管由于它的过度使用行为,它似乎会这样做。)
此外,当内存不足时,Linux 可能会使用其 OOM 杀手。
Linux 内核默认会过度使用内存。当进程使用 malloc() 请求内存段时,不会自动分配内存。您可能有 4 个进程 malloc() 每个 2gb 并且没有任何问题。当进程使用(初始化、bzero、复制)malloc()ed 内存时,就会出现问题。您甚至可以 malloc 比系统为您保留的内存更多,没有任何问题,而且 malloc() 甚至不返回 NULL!