若要释放页痛:
# echo 1 > /proc/sys/vm/drop_caches免费输入和索引:
# echo 2 > /proc/sys/vm/drop_caches要释放页面缓存、dentries和inode,请执行以下操作:
# echo 3 > /proc/sys/vm/drop_caches我试图弄清楚什么是页面缓存,入口和节点。他们到底是什么?
释放它们是否也删除了有用的memcached和/或redis缓存?
--
我为什么要问这个问题?我的亚马逊EC2服务器内存在短短7天内就被填满了--从6%增加到95%。为了删除这些缓存,我不得不运行一个双周的cron作业。然后内存使用量再次下降到6%。
发布于 2015-04-25 23:38:32
如果有些过于简单化,让我试着解释一下你问题的背景,因为答案是多方面的。
您似乎正在处理目录结构的内存缓存。上下文中的inode是表示文件的数据结构。dentries是表示目录的数据结构。这些结构可用于构建表示磁盘上文件结构的内存缓存。为了获得一个直接的列表,操作系统可以转到dentries(如果目录在那里)列出它的内容(一系列inode)。如果没有,请转到磁盘并将其读入内存,以便可以再次使用。
页缓存可以包含到磁盘上块的任何内存映射。它可以被缓冲的I/O,内存映射的文件,可执行文件的分页区域--操作系统可以从文件中保存在内存中的任何东西。
你的命令清除了这些缓冲区。
发布于 2016-05-03 14:52:59
我试图弄清楚什么是页面缓存,入口和节点。他们到底是什么?
user3344003已经给出了这个特定问题的确切答案,但是需要注意的是,这些内存结构是动态分配的。
当“空闲内存”没有更好的用途时,这些缓存将使用内存,但当其他“更重要”的应用程序想要分配内存时,则会自动清除和释放内存。
不,这些缓存不会影响任何应用程序(包括redis和memcached)维护的任何缓存。
我的亚马逊EC2服务器内存在短短7天内就被填满了--从6%增加到95%。为了删除这些缓存,我不得不运行一个双周的cron作业。然后内存使用量再次下降到6%。
您可能误解了这种情况:您的系统可能只是有效地利用了它的资源。
简化一些事情:“空闲”内存也可以被看作是“未使用的”,甚至更戏剧化--浪费资源:你为它付费,但不要使用它。这是一种非常不经济的情况,linux内核试图使您的“空闲”内存“更有用”。
其策略的一部分是使用它通过使用各种动态大小的内存缓存来保存各种类型的磁盘I/O。快速访问缓存内存可以节省“缓慢”的磁盘访问,因此这通常是一个有用的想法。
只要“更重要”的进程想要分配内存,Linux内核就会自动释放这些缓存,并将内存提供给请求进程。因此,通常不需要“手动释放”这些缓存。
Linux内核甚至可能决定将空闲进程的内存交换到磁盘(交换空间),释放用于“更重要”任务的RAM,可能还包括用作某些缓存。
因此,只要您的系统没有主动地交换,就没有什么理由手动刷新缓存。
“手动刷新”这些缓存的一个常见情况是纯粹用于基准测试比较:您的第一次基准测试运行可能以“空”缓存运行,因此结果很差,而第二次运行将显示“更好”的结果(由于预暖缓存)。通过在任何基准测试运行之前刷新缓存,您将删除“温暖的”缓存,这样您的基准测试运行就更“公平”了。
发布于 2015-11-20 14:13:14
常见的误解是“自由记忆”很重要。内存应该被使用。
所以让我们澄清这一点:
如您所建议的那样,清除缓存内存大部分是无用的,这意味着您正在关闭一个优化,因此您将得到一个慢下来。
如果您的内存真的用完了,也就是说,如果您的“已使用内存”很高,并且您开始看到交换的使用情况,那么您必须做一些事情。
但是:在AWS实例上运行了一个已知的bug,dentry缓存没有明显的原因就会占用内存。它在这个博客中得到了清晰的描述和解决。
我自己对这个bug的经验是,"dentry“缓存同时消耗”已使用“和”缓存“内存,并且似乎没有及时释放它,最终导致交换。bug本身无论如何都会消耗资源,所以您需要了解它。
https://stackoverflow.com/questions/29870068
复制相似问题