可能重复:
了解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也可以在内存中稀疏相同的页面。 如果两个进程在内存中使用相同的页面,则内核可以将两个虚拟页面映射为一个真实(并释放第二个页面)。
所以,是的,当一个进程分配的虚拟内存比可用物理内存大时,这是正常的。