系统相关 Linux 缓存清理
Linux 缓存清理
偶然想到,文章正确的顺序是什么。解决问题的办法放最后,前边一堆铺垫吊胃口?那就反过来吧,正如
有余力则学文
。
一、缓存释放办法
清理
page_cache
(page_cache是硬盘和内存之间的缓存):sync && echo 1 > /proc/sys/vm/drop_caches
清理可回收的
slab
对象(包括目录缓存、文件缓存):sync && echo 2 > /proc/sys/vm/drop_caches
清理
slab
对象和page_cache
:sync && echo 3 > /proc/sys/vm/drop_caches
-
To free pagecache: echo 1 > /proc/sys/vm/drop_caches To free reclaimable slab objects (includes dentries and inodes): echo 2 > /proc/sys/vm/drop_caches To free slab objects and pagecache: echo 3 > /proc/sys/vm/drop_caches
- inode 是表示文件的数据结构(下文详细介绍)
- dentries 是表示目录的数据结构
二、缓存产生原因
缓存的原理类同:热点数据,首次访问,读写磁盘,然后缓存起来;下次访问,从缓存中拿。
三、free命令详解
free显示系统中空闲和使用的物理内存和交换内存的总量,以及内核使用的缓冲区和缓存。
这些信息是通过解析
/proc/meminfo
来收集展示:
total (总内存)
对应
/proc/meminfo
中的MemTotal + SwapTotal
used (已使用内存 =
total - free - buffers - cache
)free (空闲内存)
对应
/proc/meminfo
中的MemFree + SwapFree
shared (主要是tmpfs使用的内存)
对应
/proc/meminfo
中的Shmem
, 在内核 2.6.32 中可用,如果不可用则显示为0
buffers (内核缓冲区使用的内存)
对应
/proc/meminfo
中的Buffers
cache (page cache 和 slabs 使用的内存 )
对应
/proc/meminfo
中的Cached
+Slab
buff/cache (
buffers + cache
)available (估算的可用内存)
估算的启动一个新应用程序可以使用的内存,与缓存或空闲字段提供的数据不同,该字段考虑了page cache,而且由于某些缓存正在使用,并非所有可回收的内存 slabs 都将被回收。
对应
/proc/meminfo
中的MemAvailable
, 在内核3.14上可用, 在内核2.6.27+上仿真, 否则与free
相同