在 Linux 系统中,内存管理通常由系统自动处理,但在某些情况下,手动释放内存可能是必要的。例如,当业务应用比较繁忙时会频繁存取文件,物理内存会被缓存大量占用,有时会出现内存不足的情况发生,甚至会导致系统性能下降。此时可主动在业务闲时手动释放内存。

一、首先查看当前内存使用情况

使用 free -m 命令查看,输出结果包括总内存、已使用内存、空闲内存、共享内存、缓冲区和缓存等信息。

二、然后执行如下步骤手动释放内存

■ 查看当前 drop_caches 的值

cat /proc/sys/vm/drop_caches

可能会提示权限不足,默认值为 0,表示不释放缓存

■ 运行 sync 命令

sync

该命令将所有未写的系统缓冲区写到磁盘中,确保文件系统的完整性

■ 手动释放内存

echo 1 > /proc/sys/vm/drop_caches

drop_caches 是 0-3 之间的数字,代表不同的含义:

0:不释放(系统默认值)

1:释放页缓存

2:释放 dentries 和 inodes

3:释放所有缓存

■ 还原配置

echo 0 > /proc/sys/vm/drop_caches

释放完内存后,将 drop_caches 的值改回 0,让系统重新自动分配内存

三、注意事项

缓存机制

Linux 的缓存机制非常先进,通常不需要手动释放内存。缓存包括 dentry(用于加速文件路径名到 inode 的转换)、Buffer Cache(针对磁盘块的读写)和 Page Cache(针对文件 inode 的读写)

性能影响

频繁手动释放内存可能会影响系统性能,建议在内存不足、应用获取不到可用内存或发生 OOM 错误时,首先分析应用方面的原因

linux 手动释放内存的更多相关文章

  1. Linux手动释放内存

    手动释放内存 1.sync将内存中的缓存写入磁盘 2.  to free pagecache, use echo 1 > /proc/sys/vm/drop_caches;       to f ...

  2. Linux手动释放缓存的方法

    Linux释放内存的命令:syncecho 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值)1 ...

  3. linux 手工释放内存 高内存 内存回收 方法思路

    linux  跑的apache,apache工作模式有   Prefork.Worker和 Event  三种,分别是基于进程.线程.综合模式.        本文中使用的apache是 Event  ...

  4. JNI手动释放内存(避免内存泄露)

    . 哪些需要手动释放? 不要手动释放(基本类型): jint , jlong , jchar 需要手动释放(引用类型,数组家族): jstring,jobject ,jobjectArray,jint ...

  5. Ubuntu系统下手动释放内存

    有时候,像mongo这种,对内存只吃不吐的,我们要手动释放一下. drop_caches的详细文档如下:Writing to this will cause the kernel to drop cl ...

  6. linux手工释放内存

    先使用sync命令以确保文件系统的完整性,sync 命令运行 sync 子例程,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node.已延迟的块 I/O 和读写映射文件. 再执行下面任意一条命 ...

  7. Linux之 手动释放内存

    我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode).它们的定义如下: 所谓"文件", 就是按一定的形式存储在介质上的信息,所以一个文件其实包含 ...

  8. CentOS 6.5 x86_64系统手动释放内存

    1.查询当前内存使用情况和释放缓存的参数 redismaster 10:29:24 [~] [root] free -m total used free shared buffers cachedMe ...

  9. linux 手动释放buff/cache

    为了解决buff/cache占用过多的问题执行以下命令即可 syncecho 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_ ...

  10. linux如何手动释放linux内存

    当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题 ...

随机推荐

  1. costmap代价地图

    1 什么是costmap代价地图 在机器人进行路径规划时,我们需要明白规划算法是依靠什么在地图上来计算出来一条路径的.依靠的是gmapping扫描构建的一张环境全局地图,但是仅仅依靠一张原始的全局地图 ...

  2. JS 通过后台接口返回的URL地址下载文件并保存到本地(已在项目中使用,保存音视频文件)

    今天做antdV表格勾选下载操作时,因为粗心大意碰到了下载问题,特此记录~ 一.单个文件下载逻辑代码如下: const exportFile = (data, fileName, _this)=> ...

  3. QT creator中cmake管理项目,如何引入外部库(引入Eigen库为例)

    在Eigen的官网下载压缩包[点我进入] 解压到当前项目的根目录(当然你也可以自己选择目录) 在当前项目的CMakeLists.txt任意位置加入这句话include_directories(${CM ...

  4. Typora实现双击图片放大 Mac

    前置条件 Typora LightBox: github下载 添加LightBox拓展 打开应用程序,找到typora,右键选择"显示包内容". 解压lightbox2代码,将di ...

  5. 焕然一新!TinyVue 组件库 UI 大升级,更符合现代的审美!

    你好,我是 Kagol,个人公众号:前端开源星球. 自从 TinyVue 组件库去年开源以来,一直有小伙伴反馈我们的 UI 不够美观,风格陈旧,不太满足现阶段审美. "TinyVue 给我的 ...

  6. Android WebView 加载 html页面 实现 不同分辨率 不同 dpi 缩放自适应处理 解决方案

    两种情况一起使用 实现 不同分辨率 不同 dpi 缩放自适应处理 //webview 需要配置 mWebView.getWebSetting().setUseWideViewPort(true);// ...

  7. 开源 - Ideal库 - 常用枚举扩展方法(二)

    书接上回,今天继续和大家享一些关于枚举操作相关的常用扩展方法. 今天主要分享通过枚举值转换成枚举.枚举名称以及枚举描述相关实现. 我们首先修改一下上一篇定义用来测试的正常枚举,新增一个枚举项,代码如下 ...

  8. Ymodem协议详解

    Xmodem.Ymodem和Zmodem协议是最常用的三种通信协议. Xmodem协议是最早的,传输128字节信息块. Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点.它可以一次传输1 ...

  9. AI运动小程序开发常见问题集锦一

    截止到现在写博文时,我们的AI运动识别小程序插件已经迭代了23个版本,成功应用于健身.体育.体测.AR互动等场景:为了让正在集成或者计划进行功能扩展优化的用户,少走弯路.投入更少的开发资源,我们归集了 ...

  10. 从Hbase shell理解列式存储

    列存储和行存储在理解上的差别挺大,特别是在非常数据行存储之后. 在行存储中,每张表的结构是固定的,某一列可以没有值但是这一列是必须在的.那么可以理解行存储的数据是结构化的. 但是列存储确有每行的数据却 ...