Linux 内存/Cache 释放方法、一键脚本以及简单分析

本文最后更新时间 ☞

如何清理/释放内存

为了能简单就简单,写了一个脚本,使用以下脚本进行内存和 Cache 的清理:

wget --no-check-certificate 'https://raw.githubusercontent.com/ernisn/freemem.sh/master/freemem.sh' && chmod +x freemem.sh && bash freemem.sh

注意:不支持 OpenVZ。


释放内存相关命令说明

如果还想了解更多,可以继续看~

一般释放内存的步骤如下:

  1. 释放前需要先使用 sync 指令将所有未写的系统缓冲区写到磁盘中(其中包含已修改的 i-node 、已延迟的块 I/O 和读写映射文件),否则在释放缓存的过程中,可能会丢失未保存的文件。
    sync
    
  2. 将需要的参数写进/proc/sys/vm/drop_caches文件中,使用类似下面的命令:
    echo 3 > /proc/sys/vm/drop_caches
    

    能用到的命令有3种:

    仅释放 pagecache:

    echo 1 > /proc/sys/vm/drop_caches
    

    释放 dentries + inodes:

    echo 2 > /proc/sys/vm/drop_caches
    

    释放 pagecache + dentries + inodes:

    echo 3 > /proc/sys/vm/drop_caches
    

    该命令在输入后会立即生效,所以使用前一定要 sync

    其中:

    pagecache

    页面缓存可以包含磁盘块的任何内存映射。这可以是缓冲 I/O,内存映射文件,可执行文件的分页区域——操作系统可以从文件保存在内存中的任何内容。Page cache 实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到 page cache 。

    dentries

    表示目录的数据结构

    inodes

    表示文件的数据结构

注:

  • 因为 Linux 的内核机制,一般情况下不需要特意释放 cache,这些缓存的内容可以增加文件读写效率。

  • 该方法只在 cache 占用大量内存导致系统内存不够用时使用,当 buffer/cached 占用内存并不大时用可能没什么效果。


Linux 使用 free 查看内存:

free

$ free
             total       used       free     shared    buffers     cached
Mem:        239672     104420     135252         28       1004      26880
-/+ buffers/cache:      76536     163136
Swap:       262140       4352     257788

其中:

名词释义

total – 总物理内存
used – 已使用内存(一般这个值会较大,因为包括了 cache 和应用程序使用的内存)
free – 未使用的内存
shared – 应用程序共享内存
buffers – 缓存(目录相关、inode 等)
cached – 缓存(已打开的文件)


关系

total = used + free
used = buffers + cached (可能还再 + shared )

  • 可以看出 buff/cache 占用的内存份额很大,有时程序运行结束后,大量内存仍位于 buff/cache 中,有时运行程序会导致内存不足,因此需要将这部分内存释放出来。

  • 第二行中的(-/+ buffers/cache):

    第一个值表示 -buffers/cache – 应用程序使用的内存大小,为 used 减去缓存值

    第二个值表示 +buffers/cache – 所有可供应用程序使用的内存大小,为 free 加上缓存值

    也就是:

    -buffers/cache = used – buffers – cached
    +buffers/cache = free + buffers + cached


其他和内存相关的命令

查看内存条数:

dmidecode | grep -A16 "Memory Device$"

One Comment

  1. Pingback: freemem.sh – 一键清理服务器内存/缓存脚本 – 懒人脚本

发表评论