64GB服务器上无需交换100GB虚拟内存

可能重复:
了解Linux上的虚拟内存使用情况> swap + physical

我们有以下的过程:

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的内存,这个虚拟内存的数量是否合适? 这里还有关于物理内存的信息:

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

正如你所看到的,只有1236k交换。

我们想知道哪里缺less30GB + RAM? 他们在磁盘上?

一个特定的进程可以有多less虚拟内存? 虚拟内存和RAM之间的连接是什么?

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

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

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

Linux也可以在内存中稀疏相同的页面。 如果两个进程在内存中使用相同的页面,则内核可以将两个虚拟页面映射为一个真实(并释放第二个页面)。

所以,是的,当一个进程分配的虚拟内存比可用物理内存大时,这是正常的。