如何清理/释放内存
为了能简单就简单,写了一个脚本,使用以下脚本进行内存和 Cache 的清理:
wget --no-check-certificate 'https://raw.githubusercontent.com/ernisn/freemem.sh/master/freemem.sh' && chmod +x freemem.sh && bash freemem.sh
注意:不支持 OpenVZ。
释放内存相关命令说明
如果还想了解更多,可以继续看~
一般释放内存的步骤如下:
- 释放前需要先使用
sync
指令将所有未写的系统缓冲区写到磁盘中(其中包含已修改的 i-node 、已延迟的块 I/O 和读写映射文件),否则在释放缓存的过程中,可能会丢失未保存的文件。sync
- 将需要的参数写进/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
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$"
Pingback: freemem.sh – 一键清理服务器内存/缓存脚本 – 懒人脚本