虚拟大小高但 RAM 和 GPU 内存使用率低的进程的缺点

虚拟大小高但 RAM 和 GPU 内存使用率低的进程的缺点

我注意到我的一些进程在我的计算机中占用了大量虚拟大小。我理解进程的虚拟大小是它实际使用的内存、它映射到自身的内存(例如 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。

相关内容