插件窝 干货文章 Linux内存机制以及手动释放swap和buffer和cache

Linux内存机制以及手动释放swap和buffer和cache

内存 释放 缓存 使用 364    来源:    2025-04-13

Linux 内存机制及手动释放 Swap、Buffer 和 Cache

Linux 内存管理机制

Linux 系统采用了一种高效的内存管理策略,主要包含以下几个部分:

  1. 物理内存:实际可用的 RAM
  2. Swap 空间:磁盘上的交换空间,当物理内存不足时使用
  3. Buffer:用于存储文件系统元数据(如目录结构、权限等)
  4. Cache:用于缓存文件内容,提高文件访问速度

Linux 的设计理念是"空闲的内存就是浪费的内存",因此会尽可能利用可用内存来缓存数据以提高性能。

查看内存使用情况

free -h

输出示例:

              total        used        free      shared  buff/cache   available
Mem:           15Gi       4.2Gi       1.3Gi       123Mi       9.5Gi        10Gi
Swap:         2.0Gi       0.0Gi       2.0Gi

手动释放内存

1. 释放 PageCache (缓存)

sync && echo 1 > /proc/sys/vm/drop_caches

2. 释放 dentries 和 inodes (目录项和索引节点缓存)

sync && echo 2 > /proc/sys/vm/drop_caches

3. 释放 PageCache、dentries 和 inodes

sync && echo 3 > /proc/sys/vm/drop_caches

4. 释放 Swap 空间

swapoff -a && swapon -a

注意事项

  1. sync 命令:确保所有未写入的数据先写入磁盘
  2. 生产环境谨慎使用:释放缓存可能导致性能暂时下降,因为系统需要重新加载被清除的缓存
  3. 自动释放:Linux 会在内存不足时自动释放缓存,通常不需要手动干预
  4. Buffer 和 Cache:它们是系统性能优化的一部分,强制释放可能影响性能

永久调整内存参数

如果需要永久修改内存相关参数,可以编辑 /etc/sysctl.conf 文件:

# 降低 swappiness (减少使用swap的倾向,0-100,值越小越倾向使用物理内存)
vm.swappiness = 10

# 提高 vfs_cache_pressure (提高回收cache的倾向,默认100)
vm.vfs_cache_pressure = 150

应用修改:

sysctl -p

最佳实践

  1. 监控内存使用情况,了解正常行为模式
  2. 只有在确定内存问题由缓存引起时才手动释放
  3. 考虑增加物理内存或优化应用程序内存使用,而非频繁释放缓存
  4. 对于长期高内存使用,考虑调整 swappiness 参数或增加 Swap 空间

记住,Linux 的内存管理机制通常比人工干预更高效,手动释放缓存应作为最后手段而非常规操作。