我有一个问题,当我尝试构建一个非常大的项目时,即使有足够的内存(实际上是 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 系统极其复杂。