div*_*aka 1 linux memory virtual-memory
我们有以下流程:
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
Run Code Online (Sandbox Code Playgroud)
假设我们只有 64GB 的 RAM,这个虚拟内存量是否可以?这里还有关于物理内存的信息:
Mem: 65995412k total, 64967388k used, 1028024k free, 3976288k buffers
Swap: 32764556k total, 1236k used, 32763320k free, 19534812k cached
Run Code Online (Sandbox Code Playgroud)
如您所见,仅交换了 1236k。
我们想知道缺少的 30GB+ RAM 在哪里?它们在磁盘上吗?
特定进程可以使用多少虚拟内存?虚拟内存和 RAM 之间有什么联系。
小智 6
在VIRT
反映达的虚拟内存的一个过程,不是一个真实的分配。进程的地址空间可能包含映射到不位于 RAM 中的相应文件的某些区域。
至少程序可执行和共享库被映射到进程的虚拟地址空间。在程序执行期间,进程可能会将其他文件映射到它的地址空间,有时它的大小可能很大(图像、电影、数据库)——甚至大于可用的 RAM 量——它受到当前可寻址内存总量的限制处理器架构。
Linux 也使用乐观内存分配策略。这意味着即使一个进程调用malloc()
物理内存分配也可能推迟到页面将被使用。这意味着该进程可能分配的 RAM 多于可用内存。
Linux 也可以在内存中稀疏相同的页面。如果两个进程在内存中使用相同的页面,内核可以将两个虚拟页面映射到一个真实页面(并释放第二个)。
所以,是的,当一个进程分配的虚拟内存多于可用物理内存的数量时,这是正常的。
归档时间: |
|
查看次数: |
1788 次 |
最近记录: |