首页/系统/Linux 内核与性能调优速查/MADV_DONTNEED / MADV_FREE 主动释放
本包目录(357 条)
sysctl 内核参数72 条CPU 与调度60 条
内存与 OOM58 条
磁盘与 IO32 条网络栈调优98 条性能分析工具37 条

MADV_DONTNEED / MADV_FREE 主动释放

应用用 madvise 主动释放区间页:DONTNEED 立即丢弃(文件页可重读、匿名页数据丢失),FREE 延迟回收但在内存紧张前保留数据。

接口madvise(2)
立即释放MADV_DONTNEED
延迟释放MADV_FREE(4.5+)
验证smaps_rollup 的 Rss 变化

C 片段

C 片段
madvise(addr, len, MADV_DONTNEED); // 立即释放,后续访问可能重读
madvise(addr, len, MADV_FREE);    // 标记可回收,压力时再丢

易错点

  • DONTNEED 后再访问会触发缺页甚至重新读文件,性能敏感路径要评估
  • 对匿名页使用前必须确保应用逻辑接受数据丢弃或已落盘

数据来源与参考

  • man-pages madvise(2)
  • Linux 内核 Documentation/admin-guide/mm/
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌