Linux 手工释放Linux Cache Memory

为了加速操作和减少磁盘I/O,内核通常会尽可能多地缓存内存,这部分内存就是Cache Memory(缓存内存)。根据设计,包含缓存数据的页面可以按需重新用于其他用途(例如,应用程序)。

缓存内存在程序运行结束后不会自动释放。这可能会导致程序频繁读写文件后可用物理内存变得很少,必要时(比如内存确实不够用),需要主动释放缓存内存。

注意:一般情况下,是不推荐主动释放缓存内存的,除非你有非常明确的需求,比如测试程序缓存内存的使用情况,因为对同一应用程序来说,缓存内存是可用的。

释放缓存内容

可以通过修改系统控制文件 /proc/sys/vm/drop_caches释放缓存内存。

1、释放 pagecache(页面缓存)

echo 1 > /proc/sys/vm/drop_caches

2、释放reclaimable slab objects (includes dentries and inodes)(可回收slab对象(包括dentry,inode))

echo 2 > /proc/sys/vm/drop_caches

3、释放 slab对象和 pagecache

echo 3 > /proc/sys/vm/drop_caches

这是一种非破坏性操作(non-destructive operation),不会释放任何脏对象。如果要增加此操作释放的对象数量,可以在写入 /proc/sys/vm/drop_cache之前运行 sync。这将最大限度地减少系统上脏对象的数量,并创建更多待删除的候选对象。

需要注意的是 /proc/sys/vm/drop_caches 不是用于控制,各种内核缓存(inodes,dentries,pagecache等等)增长的方法。当系统其它地方需要内存时,Linux内核会自动回收这些对象。

使用该文件可能引发性能问题。因为它会删除缓存对象,可能需要消耗大量的I/O和CPU才能重新创建被删除的对象,尤其是这些对象被大量使用的情况下。因此,不建议在测试或调试环境之外使用。

实践测试

free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        2373        1478         431        3942        4691
Swap:          3967           0        3967
echo 1 > /proc/sys/vm/drop_caches
free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        2373        2600         431        2821        4705
Swap:          3967           0        3967
echo 2 > /proc/sys/vm/drop_caches
free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        1635        5527         431         631        5495
Swap:          3967           0        3967
echo 3 > /proc/sys/vm/drop_caches
free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        1635        5529         431         630        5496
Swap:          3967           0        3967

参考连接

Original: https://www.cnblogs.com/shouke/p/16156335.html
Author: 授客
Title: Linux 手工释放Linux Cache Memory

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620730/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring核心原理之IoC容器初体验(2)

    本文节选自《Spring 5核心原理》 1 IoC与DI基本概念 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建、依赖,反转给容器来…

    Java 2023年6月7日
    069
  • 【JAVA基础】对象的序列化和反序列化

    https://www.bilibili.com/read/cv6257046 posted on2020-08-19 23:07 tigerloveapple 阅读(67 ) 评…

    Java 2023年5月29日
    064
  • 用typora+PicGo+GITee实现自动上传图片

    typora+PicGo+Gitees自动上传图片 1.打开下载好的 PicGo 点击左侧最下方 –> 插件设置。在右边输入框 输入:gitee,选择右边的插件,…

    Java 2023年6月7日
    0103
  • Effective Java 第三版—— 84. 不要依赖线程调度器

    Tips书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code注意,书中的有些代码里方法是基于Java 9…

    Java 2023年5月29日
    084
  • 【SpringCloud-Alibaba系列教程】10.gateway网关

    简介 在SpringCloud中网关作为一个重要的组成部分,网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(…

    Java 2023年6月5日
    091
  • 软件工程-就几个方面谈谈做项目和做产品的区别

    从严谨的角度触发,应该基本按照同样的标准实现项目和产品。 很可惜,在实际工作中,这基本上是不太可能的,除非项目比较大,客户要求比较严格。 本文主要谈以下几点: 1、需求差异 2、实…

    Java 2023年6月9日
    097
  • 与socket相关的流

    我看先看一下通过socket取得的流的运行类型 InputStream inputStream = socket.getInputStream(); 可以看到是SocketInpu…

    Java 2023年6月5日
    074
  • 一次打包引发的思考,原来maven还能这么玩?

    前言 依赖关系 你会怎么做? 必知的几个参数 总结 昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下: 「 大致的意思」:公司最近在整 多&a…

    Java 2023年6月14日
    077
  • Java基础之 类型转换

    类型转换 由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换 运算中,不同类型的数据线转化为同一类型,然后进行运算 强制类型转换 自动类型转换 1 public…

    Java 2023年6月8日
    076
  • 单例模式–还没从工厂中逃脱出来?看来是注定单身了..

    前言 上次我们聊了聊一个略微重量级的工厂模式,不知道你是否消化完从工厂中逃脱出来了呢?不是我说,今天的单例模式,恰恰好相反了,孤孤单单,看来是注定单身了.. 先来看看单例模式在jd…

    Java 2023年6月5日
    087
  • nginx 转发 minio 服务

    现有3台服务器 192.168.1.225 nginx 192.168.1.229 其他应用服务 192.168.1.234 minio nginx配置文件如下 1 # For m…

    Java 2023年5月30日
    074
  • 分析自动打卡脚本——大一入学遗作

    HTTP协议 1.何为HTTP协议 HTTP协议又名超文本传输协议,是一种基于TCP/IP的传输协议,顾名思义,其传输的内容为超文本内容,在互联网早期,我们只能传输非二进制的文本,…

    Java 2023年6月7日
    087
  • 使用java调用 salesforce SOAP API

    可以从github上下载最新版本然后用maven工具构建 下面列下我用wsc工具打成jar包测试过程中的代码: java -cp force-wsc-27.0.0-jar-with…

    Java 2023年6月7日
    041
  • Smack 3.3.1 发布,Java 的 XMPP 开发包

    Smack 3.3.1 发布了,这是一个小更新版本,主要更新包括: [SMACK-441] – Memory leak in KeepAliveManager [SMA…

    Java 2023年5月29日
    068
  • 上传图像

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月6日
    090
  • JDK8新特性

    1、语法:完整的Lambda表达式由三部分组成:参数列表、箭头、声明语句 2、绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型,所以参数可以省略 3、当l…

    Java 2023年5月30日
    048
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球