我的笔记本电脑是Thinkpad x220,4G内存,硬盘是7200rpm,安装了Ubuntu 12.04,使用Unity桌面。
当我打开 eclipse 和 chrome 时,它们占用了大约 2G 内存。结果如下free -m
:
total used free shared buffers cached
Mem: 3841 3301 540 0 10 956
-/+ buffers/cache: 2334 1507
Swap: 8187 306 7881
结果如下top
:
Mem: 3934188k total, 3540508k used, 393680k free, 45680k buffers
Swap: 8384508k total, 313512k used, 8070996k free, 1078888k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5552 martin 20 0 4249m 388m 6560 S 0 10.1 2:46.28 java
3369 martin 20 0 2548m 182m 32m R 1 4.7 29:19.64 chrome
3406 martin 20 0 1000m 155m 16m S 0 4.1 4:18.97 chrome
2736 martin 20 0 1582m 106m 29m S 1 2.8 13:10.27 compiz
3704 martin 20 0 945m 85m 8396 S 0 2.2 0:15.60 chrome
11047 martin 20 0 926m 82m 23m S 0 2.2 0:06.52 chrome
11443 martin 20 0 915m 72m 21m S 0 1.9 0:46.08 chrome
4280 martin 20 0 822m 66m 12m S 4 1.7 14:59.41 chrome
大约 10 分钟后,我的可用内存只剩下 100M+,然后系统开始将内存交换到磁盘,这导致我的计算机完全冻结,交换完成后才会恢复。
我已经有了vm.swappiness = 10
我搜索了 google,有些文章说当内存不够时,系统会释放缓存,并将其用作内存。但在我看来,缓存从未被释放过。当系统内存不足时(但实际上我有足够的内存,一些内存只是用于缓存),它不会使用缓存,而是直接将内存交换到磁盘,从而导致死机。
我该如何避免这种情况?
减少缓存内存?
答案1
如果你想要释放更多的内存,可以通过设置来获得vm.min_free_kbytes
。例如,如果你想让系统浪费 256MB 内存,请使用以下命令:
sysctl -w vm.min_free_kbytes=262144
系统现在将保留 256MB 的空闲空间,并且可用的内存减少了 256MB。这将使性能变差,但会使缓存变小,正如您所要求的那样。
但我认为你忽略了一个重要的观点——空闲内存并不比计算机中根本没有安装的内存好。它们都不能帮助计算机提高性能。
您应该将所有设置恢复为默认设置,然后解决您的实际问题——您的计算机死机了。