优秀的编程知识分享平台

网站首页 > 技术文章 正文

Linux如何自动释放缓存

nanyue 2025-08-06 22:07:48 技术文章 9 ℃

问题描述:

  • 现象: Linux如何自动释放缓存

步骤

  1. 第一步
  2. 第二步
  3. 第三步

日志

文字描述

手动释放缓存和自动释放缓存

在Linux系统中,缓存(Cache)是用于提高文件系统性能的一种机制,它存储了最近访问过的文件数据,以便下次访问时能够更快地读取。然而,在某些情况下,可能需要手动或自动释放这些缓存,例如当系统内存不足时,或者为了确保数据的及时更新。
手动释放缓存:可以使用`sync`命令将缓存中的数据写入磁盘,然后使用`echo 3 > /proc/sys/vm/drop_caches`命令释放缓存。
自动释放缓存:可以使用`cron`定时任务,在系统负载较高时自动释放缓存。例如,在每天凌晨2点执行`echo 3 > /proc/sys/vm/drop_caches`命令释放缓存。

free 与 available 的区别

free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)

Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。

buff 和 cache 的区别

cache:文件系统层级的缓存,从磁盘里读取的内容是存储到这里,这样程序读取磁盘内容就会非常快,比如使用grep和find等命令查找内容和文件时,第一次会慢很多,再次执行就快好多倍,几乎是瞬间。但如上所说,如果对文件的更新不关心,就没必要清cache,否则如果要实施同步,必须要把内存空间中的cache clean下

buffer:磁盘等块设备的缓冲,内存的这一部分是要写入到磁盘里的。这种情况需要注意,位于内存buffer中的数据不是即时写入磁盘,而是系统空闲或者buffer达到一定大小统一写到磁盘中,所以断电易失,为了防止数据丢失所以我们最好正常关机或者多执行几次sync命令,让位于buffer上的数据立刻写到磁盘里。

代码片段

可以通过向/proc/sys/vm/drop_caches文件写入特定的值来手动释放缓存:

echo 1 > /proc/sys/vm/drop_caches:释放页缓存。
echo 2 > /proc/sys/vm/drop_caches:释放dentries和inodes。
echo 3 > /proc/sys/vm/drop_caches:释放所有缓存(页缓存、dentries和inodes)。

# 查看内存使用情况
free -h
              total        used        free      shared  buff/cache   available
Mem:         467.3M       94.0M      308.8M        2.4M       64.5M      360.2M
Swap:             0           0           0

#free + buff/cache 约等于 available,并且会略大约,因为有些不可释放,不能让其使用

# 写文件
dd if=/dev/zero of=test bs=1M count=20
可以看到buff/cache增大
free -h
              total        used        free      shared  buff/cache   available
Mem:         467.3M       94.0M      288.0M        2.4M       85.3M      360.2M
Swap:             0           0           0

# 释放缓存
echo 3 > /proc/sys/vm/drop_caches

# 读文件
dd if=test of=/dev/null bs=1M count=20

# 可以看到buff/cache增大
free -h
              total        used        free      shared  buff/cache   available
Mem:         467.3M       93.8M      289.4M        2.4M       84.1M      360.3M
Swap:             0           0           0

#同时也看下面的参数
cat /proc/meminfo
MemTotal:         478504 kB
MemFree:          295724 kB
MemAvailable:     368812 kB
Buffers:            1108 kB
Cached:            65064 kB

#对文件的读写Cached变化很大,对/dev/mmcblk0px的读写Buffers参数变化很大,例如直接操作dd if=/dev/mmcblk0px

图片

结论

  • 问题已解决,性能提升 20%。

待查资料问题

  • 问题 1:?
  • 问题 2:?

参考链接

  • 官方文档

最近发表
标签列表