free -m
total used free shared buffers cached
Mem: 24055 22439 1615 8969 16 9096
-/+ buffers/cache: 13326 10728
Swap: 0 0 0
所以我最初来到这里,想要一点额外的 RAM 空间,这样我的 spotify 就不会崩溃,或者我可以启动另一个 java 服务器或者其他什么。
我试过了echo 3 > /proc/sys/vm/drop_caches
,但没用。读出之后是一样的。即使关闭了 chrome 和所有占用大量内存的东西,页面缓存仍然会保留,直到真正重新启动。
是什么原因造成的?
答案1
我一直都是这么做的:
echo 3 | sudo tee /proc/sys/vm/drop_caches
答案2
根据sudo
提示,您可以使用以下一行代码:
# free -m && sync && echo 3 > /proc/sys/vm/drop_caches && free -m
total used free shared buff/cache available
Mem: 7840 1958 2775 739 3106 4795
Swap: 7999 0 7999
total used free shared buff/cache available
Mem: 7840 1958 4698 734 1183 4860
Swap: 7999 0 7999
这释放了 2 GiB 的缓冲区/缓存。从 3.1 GB 减少到了 1.2 GB。
因此它可以正常工作,但是在您的情况下,RAM 中没有可以清除的缓冲存储。
答案3
Linux(内核)利用未使用的内存作为页面缓存(和缓冲区缓存 - 它仍然存在)来提高性能。
free
-> 不用于任何用途
echo 3 > /proc/sys/vm/drop_caches
释放页面缓存、dentry 和 inode,这将使页面缓存/缓冲区缓存返回到“空闲”状态。
Ubuntu 14.04
# free -m
total used free shared buffers cached
Mem: 1375 1289 85 5 112 302
-/+ buffers/cache: 875 500
Swap: 0 0 0
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 87660 115120 309500 0 0 1 9 4 18 0 0 100 0 0
# echo 3 > /proc/sys/vm/drop_caches
# vmstat
fprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 512720 2236 25756 0 0 1 9 4 18 0 0 100 0 0
# free -m
total used free shared buffers cached
Mem: 1375 874 500 5 2 25
-/+ buffers/cache: 847 528
Swap: 0 0 0
buffers
会cached
下降,free
也会增加,但这并不意味着您有更多的内存可供应用程序使用。
在您的情况下,查看+ buffers/cache
10728MB,这是应用程序当前可用的内存。
如需了解更多信息,请查看Linux 吞噬了我的 RAM!
顺便说一句:Fedora 和 Arch Linux 的输出使用方式
free
不同procps-ng
。
输出结合了 buff/cache 并删除了有点令人困惑的-/+ buffers/cache
。
我们可以清楚地看到buff/cache
删除了但available
没有变化。我个人认为这是一个更好的实现/解释。
# free -m
total used free shared buff/cache available
Mem: 1874 117 18 1 1737 1708
Swap: 0 0 0
# echo 3 > /proc/sys/vm/drop_caches
# free -m
total used free shared buff/cache available
Mem: 1874 117 1654 1 102 1708
Swap: 0
答案4
考虑添加一些交换空间。当您的系统开始内存不足时,OOM(内存不足)杀手将开始终止应用程序以释放资源。很多时候它会终止您需要运行的应用程序。
dd if=/dev/zero of=/mnt/swapfile bs=1024 count=1048576
将在 /mnt 目录中生成 1GB 的交换文件。然后使用以下命令将其转换为实际交换空间:
mkswap /mnt/swapfile
然后打开它:
swapon /mnt/swapfile
您还需要使其在重新启动后仍然存在,因此编辑 /etc/fstab 文件以包含:
/mnt/swapfile none swap sw 0 0