我的虚拟机中的所有内存都被什么占用了?这不是磁盘缓存

我的虚拟机中的所有内存都被什么占用了?这不是磁盘缓存

我有一个问题,当我尝试构建一个非常大的项目时,即使有足够的内存(实际上是 14 GB),我的机器也会开始交换(几 GB)。当我运行时free,它显示它不是磁盘缓存:

$ free -m
             total       used       free     shared    buffers     cached
Mem:         12900       6350       6549          0          7         77
-/+ buffers/cache:       6266       6633
Swap:         9211        233       8978

因此,实际使用了 6.3 GB 内存,但如果我查看顶部(按内存使用百分比排序),就会发现没有任何内存在使用:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                               
38669 blong     20   0 1282m 378m  42m S    2  2.9   0:50.79 firefox                                               
 1327 root      20   0  365m 126m 4056 S    4  1.0  40:23.94 Xorg                                                  
 2540 blong     20   0 1578m  67m  10m S    2  0.5  21:33.35 gnome-shell                                           
13943 blong     20   0  579m  12m 5604 S    2  0.1   1:07.01 gnome-terminal                                        
30093 blong     20   0  540m 8664 5572 S    0  0.1   0:03.96 icemon                                                
 2558 blong     20   0  362m 5964 1808 S    0  0.0   5:17.44 vmtoolsd                                              
 2526 blong     20   0  672m 5056 2000 S    0  0.0   0:26.81 gnome-settings-                                       
 2546 blong     20   0  354m 3484 2244 S    0  0.0   5:08.96 pulseaudio

我错过了什么吗?

重新启动虚拟机可以解决此问题,但我更愿意弄清楚实际发生了什么。

答案1

互换并不是坏事。在这种情况下,这可能是一件好事。有一个内核参数 ( vm.swappiness) 控制内核交换不活动内存页面的倾向。这样做是为了让 RAM 可以更好地用于文件系统缓存等任务。

虽然我通常不鼓励在不知道发生了什么的情况下调整内核参数,但您可以通过添加vm.swappiness = 0/etc/sysctl.conf执行sysctl -p.


至于什么在使用你的记忆,这不是一个简单的答案。除了应用程序私有内存和缓存之外,还有很多东西会使用系统内存。还有其他东西,例如共享内存、映射内存和内核板。

您可以通过查看获得有关系统内存使用情况的大量信息/proc/meminfo。但这不适合胆小的人。 Linux 的VM 系统极其复杂。

相关内容