Linux下如何通过Free-M工具查看系统内存实际使用情况及缓存释放时机?
- 内容介绍
- 文章标签
- 相关推荐
本文共计772个文字,预计阅读时间需要4分钟。
真实内存压力看available,不是used;cache释放由内核自动触发,无需手动干预,也不存在固定时机——它只在应用真正需要内存时才被回收。
重点盯住 available,别被 used 迷惑
free -m 输出中,Mem 行的 available 值才是系统当前能立即分配给新进程的内存估算量。它已扣除不可回收部分,并计入可快速释放的 page cache 和部分 slab 缓存。
- used 高 ≠ 内存紧张:Linux 把空闲内存主动用于 cache(如文件读取缓存),这部分随时可丢弃
- 只要 available > 500MB(小内存机器可放宽至 200MB),系统就处于健康状态
- 若 available 持续低于 100MB,且 swap used 开始增长,才说明物理内存开始吃紧
Cache 不是“占着不用”,而是“热数据暂存”
cache 主要是页缓存(PageCache),保存最近读写过的文件内容,受 LRU 算法管理。它的存在大幅减少磁盘 IO,提升整体响应速度。
- cache 占比高(比如占 total 的 60%+)是常态,尤其在有大量文件读写的服务器上
- 内核不会“等到内存快没了才释放”,而是在每次内存分配请求时动态评估:哪些 cache 页面最久未用、是否脏页、是否被锁定
- 你执行一个大内存 malloc,内核会立刻回收合适 cache 页面,整个过程对用户透明
想确认 cache 实际构成?拆开看 Buffers 和 Cache
free -m 默认合并显示 buff/cache,但两者作用不同:
- Buffers:块设备底层数据缓存(如 ext4 日志、元数据),生命周期短,一般几秒内就刷盘或丢弃
- Cache:文件内容缓存,占比更大,才是真正影响 available 估算的关键部分
要分开查看,用:
free -m -w(Linux 5.0+ 内核支持)
或直接读:
grep -E "^(Buffers|Cached|SReclaimable)" /proc/meminfo
其中 SReclaimable 是 Cached 中明确可安全回收的部分,可作参考。
别手动清 cache,它自己会动
echo 3 > /proc/sys/vm/drop_caches 这类操作看似“释放内存”,实则有害:
- 清掉的 cache 会在下次文件访问时立刻重建,引发 I/O 尖峰
- available 值可能短暂上升,但几秒后又回落,不解决根本问题
- 干扰内核内存管理逻辑,反而降低系统稳定性
真正该做的是:当 available 持续偏低时,用 ps aux --sort=-%mem | head -10 找出 RSS 占用高的进程,查它们是否内存泄漏或配置过大。
本文共计772个文字,预计阅读时间需要4分钟。
真实内存压力看available,不是used;cache释放由内核自动触发,无需手动干预,也不存在固定时机——它只在应用真正需要内存时才被回收。
重点盯住 available,别被 used 迷惑
free -m 输出中,Mem 行的 available 值才是系统当前能立即分配给新进程的内存估算量。它已扣除不可回收部分,并计入可快速释放的 page cache 和部分 slab 缓存。
- used 高 ≠ 内存紧张:Linux 把空闲内存主动用于 cache(如文件读取缓存),这部分随时可丢弃
- 只要 available > 500MB(小内存机器可放宽至 200MB),系统就处于健康状态
- 若 available 持续低于 100MB,且 swap used 开始增长,才说明物理内存开始吃紧
Cache 不是“占着不用”,而是“热数据暂存”
cache 主要是页缓存(PageCache),保存最近读写过的文件内容,受 LRU 算法管理。它的存在大幅减少磁盘 IO,提升整体响应速度。
- cache 占比高(比如占 total 的 60%+)是常态,尤其在有大量文件读写的服务器上
- 内核不会“等到内存快没了才释放”,而是在每次内存分配请求时动态评估:哪些 cache 页面最久未用、是否脏页、是否被锁定
- 你执行一个大内存 malloc,内核会立刻回收合适 cache 页面,整个过程对用户透明
想确认 cache 实际构成?拆开看 Buffers 和 Cache
free -m 默认合并显示 buff/cache,但两者作用不同:
- Buffers:块设备底层数据缓存(如 ext4 日志、元数据),生命周期短,一般几秒内就刷盘或丢弃
- Cache:文件内容缓存,占比更大,才是真正影响 available 估算的关键部分
要分开查看,用:
free -m -w(Linux 5.0+ 内核支持)
或直接读:
grep -E "^(Buffers|Cached|SReclaimable)" /proc/meminfo
其中 SReclaimable 是 Cached 中明确可安全回收的部分,可作参考。
别手动清 cache,它自己会动
echo 3 > /proc/sys/vm/drop_caches 这类操作看似“释放内存”,实则有害:
- 清掉的 cache 会在下次文件访问时立刻重建,引发 I/O 尖峰
- available 值可能短暂上升,但几秒后又回落,不解决根本问题
- 干扰内核内存管理逻辑,反而降低系统稳定性
真正该做的是:当 available 持续偏低时,用 ps aux --sort=-%mem | head -10 找出 RSS 占用高的进程,查它们是否内存泄漏或配置过大。

