我注意到我的一些进程在我的计算机中占用了大量虚拟大小。我理解进程的虚拟大小是它实际使用的内存、它映射到自身的内存(例如 X 服务器的显卡 RAM)、磁盘上已映射到它的文件(最显着的是共享库)的总和),以及与其他进程共享的内存。换句话说,虚拟大小代表程序当前能够访问多少内存。
我正在运行的进程占用大量虚拟大小(~117 GB),但 RAM 很少:
GPU 内存很少:
和低磁盘 I/O:
此类具有高虚拟大小(但 RAM、GPU 内存和磁盘 I/O 较低)的进程可能会产生任何潜在的不良影响吗?它们能以某种方式减慢其他进程吗?该计算机具有 32 GB RAM。
答案1
一般来说,应该不会有什么不好的影响。然而,Linux 默认允许过度使用内存。这意味着如果一个进程请求内存,Linux 会说“当然”。然后,如果它确实耗尽了内存(包括交换空间),Linux 将开始杀死进程以释放内存。
因此,如果您的进程分配了 117GB 但没有使用其中的大部分,它将显示 117GB 虚拟内存。然而,如果你的进程突然决定它实际上要填满那 117GB,Linux 将耗尽内存并杀死它,也许还有其他过程(这就是不良影响的来源)。
Linux 内核可以配置允许的过量使用量。该链接中描述了如何执行此操作的过程,但我也会在这里进行描述,以将所有内容保留在一个地方。
在 Linux 内核 ≥ 2.5.30 上,有两个 proc 文件对此进行调节。首先,有/proc/sys/vm/overcommit_memory
。这可以具有三个值:
0
:让内核自己决定允许多少过度使用1
:允许无限制的超额使用2
:允许根据 进行过度承诺/proc/sys/vm/overcommitment_ratio
。
另一个 proc 文件/proc/sys/overcommitment_ratio
表示如果另一个文件设置为 则允许的内存过量使用百分比2
。如果overcommit_memory
设置为2
,Linux 将允许提交所有交换空间,加上overcommitment_ratio
% 的 RAM。