使用 echo 3 > /proc/sys/vm/drop_caches 释放页面缓存不起作用?

使用 echo 3 > /proc/sys/vm/drop_caches 释放页面缓存不起作用?
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

bufferscached下降,free也会增加,但这并不意味着您有更多的内存可供应用程序使用。

在您的情况下,查看+ buffers/cache10728MB,这是应用程序当前可用的内存。

如需了解更多信息,请查看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

相关内容