如何清除或禁用内存缓存?


49

系统启动后,几分钟后,我的内存缓存已满,并开始使用交换功能。这是/ proc / meminfo的屏幕截图。

记忆

但是,如果在此之后我可以禁用此过程/清理缓存,我认为我的系统将在某种程度上加快速度。如果我在这里错了,请纠正我。

我也尝试过Bleachbit内存清理,但是它似乎无法正确清理内存缓存。此外,该功能仍处于试验阶段。

漂白位记忆

这里已经发布了一个类似的问题:如何禁用预取缓存?,但这与Ubuntu Server有关,答案也与手动设置等有关。

因此,我想知道是否存在一些用于禁用/启用Ubuntu 12.04的内存缓存的软件。


您确定这可以解决您的问题吗?内存不会无故填满。我还遇到了我的记忆正在耗尽的问题,并将其追溯到tracker-miner。卸载所有跟踪程序包后,我的问题消失了。我也有4GB的内存,chach使用了2GB,但是我也没有遇到任何问题。
丹尼尔·库尔曼2012年

1
@danielkullmann:他指的是缓存的内存,而不是应用程序使用的内存...
ish

@izx是的,我知道。可能只是他在寻找解决错误问题的方法。内核足够聪明,不会在程序需要时用缓存填充内存。这就是为什么我认为他的内存问题来自使用过多内存的程序。
丹尼尔·库尔曼2012年

@danielkullmann:我很好奇,您是如何追溯到一个吞噬了所有内存的进程的呢?
Bharadwaj Srigiriraju 2012年

我只是使用了htop命令,并按内存使用情况进行了排序。
丹尼尔·库尔曼2012年

Answers:


58

注意: Linux不会“吃掉”您的RAM!请在下面查看Geirha的出色答案,以了解原因...

经过上述说明后,如果您仍然觉得“清理”缓存可以帮助您,则可以肯定地尝试一下:它是终端机的一线工具:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

没有简单的方法来禁用缓存,但是如果您想执行以下操作,则可以通过每分钟清理一次来达到相同的效果:

  • 使它成为一个工作
  • Alt-F2,键入gksudo gedit /etc/crontab,然后在底部附近添加以下行:

    */15 * * * * root sync && echo 3 > /proc/sys/vm/drop_caches

  • 这每15分钟清洁一次。如果您确实愿意, 可以将第一个参数更改为**/5来设置为1或5分钟*/15

一线知道真正的可用RAM,除了高速缓存

Geirha的答案解释了细节,但是总之,您可以通过以下方式获得可用兆字节数:

free -m | sed -n -e '3p' | grep -Po "\d+$"

在我的2GB命令行服务器上,它返回的运行状况非常好1835


3
恩!淘汰缓存已经足够糟糕了,但是为此进行cronjob吗?我的意思是,可以说,这确实可以“解决”问题,但这并没有减轻它的痛苦。
Reid 2012年


@izx:嗯...这就是创建cronjob的方式。如果我要定期删除缓存,这是否意味着我实际上在降低系统速度?如果真是这样,我想你的回答听起来更像是理论答案,而不是盖尔哈的答案。:p好答案,顺便说一句...
Bharadwaj Srigiriraju 2012年

1
@ForbiddenOverseer:我之所以这么说是因为您想“禁用”缓存,而定期删除它是实现此目的的唯一方法。我在顶部的注释(和geirha的链接)清楚地表明,即使实际上看起来像在“吃掉RAM”,高速缓存实际上在大多数情况下也可以加快系统的速度---是的,IMO,您会降低系统的速度,但是您想尝试一下,所以我只是回答了您的问题,而不是简单地na您并告诉您这是个坏主意,所以您不应该这样做!我只是给了您进行实验的能力...:D
ish

1
我正在使用Ubuntu Server 12.04 LTS作为VDS。我正在尝试此答案中提供的方法,但是我一直在不断获取tee: /proc/sys/vm/drop_caches: Permission denied。有小费吗?
Eimantas 2013年

44

救命!Linux吃了我的RAM!

www.linuxatemyram.com以FAQ形式精美地解释了这一点,其要点是:

这是怎么回事?

Linux正在借用未使用的内存进行磁盘缓存。这使您看起来内存不足,但事实并非如此!一切顺利!

为什么这样做呢?

磁盘缓存使系统更快!除了使新手感到困惑之外,没有其他缺点。它永远不会以任何方式占用应用程序的内存!

如果我想运行更多的应用程序怎么办?

如果您的应用程序需要更多的内存,则只需取回磁盘缓存借用的一部分。磁盘缓存始终可以立即归还给应用程序!您的Ram并不低!

我如何查看我实际上有多少免费的RAM?

要查看应用程序不交换可以使用多少内存,请运行free -m并查看“可用”列:

$ free -m
              总可用免费共享buff /缓存可用
内存:1504 1491 13 0 855       792
掉期:2047 6 2041
这是您的答案,以兆字节为单位。


来源:如前所述,优秀的www.linuxatemyram.com-请访问以获取更多信息。


1
@geirha:谢谢您的链接。它提供了很多信息,我喜欢最后给出的实验!
Bharadwaj Srigiriraju 2012年

@izx:tbh,我很难决定接受的答案。更不用说,此链接实际上以其他方式提供了信息...;)
Bharadwaj Srigiriraju 2012年

@ForbiddenOverseer:请参阅我的评论以得到详细的答复-我给了您为什么不应该这样做的简短版本,但是无论如何都回答了您的问题,使您可以尝试并自己尝试一下。如果您认为清理/删除缓存无济于事,那就不要做:)
ish 2012年

@izx,在这种情况下,我很难做到这一点。但是,您确实对此事写了一个有用的文字,所以也许您可以将URL添加到您的答案中,然后我们删除我的答案?
geirha 2012年

不需要,您的链接来自一个出色的资源;我只是在答案中加上了部分内容(带署名),因此它现在是一个完全有效的替代方法(实际上是公众所见的更好答案!)很棒,值得推荐-欢迎使用5k!
ish 2012年

4

检查您当前的内存使用情况

 watch -n 1 free -m

要么

 watch -n 1 cat /proc/meminfo

释放空间

 sudo sysctl -w vm.drop_caches=3

注意:此操作不会使您的系统更快,也不会影响其稳定性和性能,它只会清理Linux内核在缓存上使用的内存。

要么

 sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

注意:您可以使用cron作业来安排上面的命令在特定的时间间隔运行。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.