64GB 服务器上的 100GB 虚拟内存(无交换)

64GB 服务器上的 100GB 虚拟内存(无交换)

可能重复:
了解 Linux 上的虚拟内存使用情况 > 交换 + 物理

我们有以下流程:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         
10684 root       8 -15 89.6g  13g 1.1g S 406.9 21.8 316:34.89 java 

假设我们只有 64GB 的 RAM,这个虚拟内存量可以吗?以下是有关物理内存的信息:

Mem:  65995412k total, 64967388k used,  1028024k free,  3976288k buffers
Swap: 32764556k total,     1236k used, 32763320k free, 19534812k cached

如您所见,只有 1236k 被交换。

我们想知道丢失的 30GB 以上的 RAM 在哪里?它们在磁盘上吗?

对于一个特定进程来说,多少虚拟内存是合适的?虚拟内存和 RAM 之间有什么联系。

答案1

反映VIRT到量虚拟内存由进程分配,而不是实际分配。进程的地址空间可能包含某些区域映射到不在 RAM 中的相应文件。

至少程序可执行文件和共享库被映射到进程的虚拟地址空间。在程序执行期间,进程可能会将其他文件映射到其地址空间,有时其大小可能很大(图像、电影、数据库)——甚至大于可用的 RAM 量——它受当前处理器架构上可寻址内存总量的限制。

此外,Linux 使用乐观内存分配策略。这意味着即使进程调用malloc()物理内存分配,也可能被推迟到页面被使用时。这意味着进程可能会分配比可用内存更多的 RAM。

Linux 还可以在内存中分散相同的页面。如果两个进程使用内存中的相同页面,则内核可以将两个虚拟页面映射到一个实际页面(并释放第二个页面)。

因此,是的,当进程分配的虚拟内存多于可用物理内存量时,这是正常的。

相关内容