Linux shell:echo N > /proc/sys/vm/drop_caches清理缓存

echo N>/proc/sys/vm/drop_caches清理缓存

引言:内核窗口—proc文件系统这篇笔记中,我们介绍了/proc主要体现进程及内核信息状态。与/proc下其它文件的“只读”属性不同的是,管理员可对/proc/sys子目录的许多文件内容进行修改,以更改内核的运行特性。写入操作一般类似于 echo DATA >/path/to/your/filename的格式进行。这里以echo N>/proc/sys/vm/drop_caches为例介绍说明。


一、问题现象:

echo N > /proc/sys/vm/drop_caches , 当N数值不同时,free –m存在差异

1.1、echo写入数值之前—free-m内容

首先查看/proc/sys/vm/drop_caches的默认值,以便可以修改回来

这里写图片描述
图1、/proc/sys/vm/drop_caches默认值

然后free-m查看此时内存使用情况,对于各字段含义,可以参考:linux free命令使用

这里写图片描述
图2、未更改数据时free -m内容

1.2、echo写入不同数据—free-m内容

执行echo 1 > /proc/sys/vm/drop_caches, 其中绿色框是标记发生改变的部分,由于buffers 和 cached数值变化,第一行free和used均发生变化。

这里写图片描述
图3、echo 1 > /proc/sys/vm/drop_caches

执行echo 2 > /proc/sys/vm/drop_caches, 其中绿色框是标记发生改变的部分,这次仅有buffers由0变为1,cached基本没有变化。

这里写图片描述
图4、echo 2 > /proc/sys/vm/drop_caches

执行echo 3 > /proc/sys/vm/drop_caches, 这次基本上,和写入2区别不大,没有什么变化。

这里写图片描述
图5、echo 3 > /proc/sys/vm/drop_caches


二、现象解释:

  前面我们执行echo N > /proc/sys/vm/drop_caches,再free –m查看内存使用情况,输入不同的N值,free –m内存中缓存buffers会有差异,现在我们就是要解释/proc/sys/vm、drop_caches, 这个文件到底是什么?另外可以写入哪些数值,具体适用于什么场景。

2.1、内核文档说明

  查看linux内核文档,可以得到以下信息:

这里写图片描述
图6、linux内核文档关于drop_caches的说明

  可以看出,/proc/sys是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。其默认数值为0.

  向/proc/sys/vm/drop_caches中写入内容,会清理缓存。建议先执行sync(sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)。执行echo 1、2、3 至 /proc/sys/vm/drop_caches, 达到不同的清理目的。

2.2、使用建议

  这里找到一份关于清理缓存的使用建议手工释放linux内存.

  实际项目中告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。相反,如果在这个时候,我们告诉用户,修改系统的一个值,“可以”释放内存,free就大了。用户会怎么想?不会觉得操作系统“有问题”吗?所以说,我觉得既然核心是可以快速清空buffer或cache,也不难做到(这从上面的操作中可以明显看到),但核心并没有这样做(默认值是0),我们就不应该随便去改变它。

  一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。当发生内存不足、应用获取不到可用内存、OOM错误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了。

  我觉得,排除内存不足的情况外,除非是在软件开发阶段,需要临时清掉buffer,以判断应用的内存使用情况;或应用已经不再提供支持,即使应用对内存的时候确实有问题,而且无法避免的情况下,才考虑定时清空buffer。(可惜,这样的应用通常都是运行在老的操作系统版本上,上面的操作也解决不了)。


三、小结:

  与/proc下其它文件的“只读”属性不同的是,管理员可对/proc/sys子目录的许多文件内容进行修改,以更改内核的运行特性。写入操作一般类似于 echo DATA >/path/to/your/filename的格式进行。本篇文章以echo N>/proc/sys/vm/drop_caches为例,介绍了写入不同数值,清理缓存的作用。

这里写图片描述
图7、管理员拥有写权限


参考资料:
1、linux free命令使用
2、linux内核文档
3、手工释放linux内存.

纠错与建议
邮箱:db_hebut@163.com



版权声明

原文链接:https://blog.csdn.net/XD_hebuters/article/details/79608136

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在你的问题中,你提到了一个关于debugger:///vm的情况。根据你提供的引用内容,这个问题可能与Visual Studio 2010的外接程序VMDebugger有关。根据引用\[1\]中的错误信息,你可以尝试移除该外接程序来解决问题。具体操作是打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\AddIns\VMDebugger.Connect路径,将LoadBehavior项的值改为0。然后打开Visual Studio 2010,进入工具->外接程序管理器,取消“可用外接程序”前面的勾选。这样应该可以解决你遇到的问题。\[2\] #### 引用[.reference_title] - *1* *2* [VS2012外接程序VMDebugger未能加载或导致了异常](https://blog.csdn.net/maryhuan/article/details/42676915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue/cli3的项目在控制台中出现debugger:///VMXXXXXX解决方法。](https://blog.csdn.net/SilenceJude/article/details/108049885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值