~~~ free -h 与 sync ~~~
清理内存前,得先知道内存去哪儿了。free -h
内存(物理内存)部分
total:系统总共的物理内存容量,这里是约 7.7GiB。
used:已经被使用的物理内存容量,为 2.3GiB。free:完全空闲、未被使用的物理内存容量,是 175MiB。
shared:被多个进程共享使用的内存容量,为 1.0MiB。
buff/cache:用于缓存(如文件缓存等)的内存容量,共 5.2GiB。
available:系统当前可用于新进程分配的内存容量(考虑了缓存等可回收部分),为 5.1GiB。
交换(swap 分区)部分
total:交换分区的总容量,是 974MiB。
used:已经被使用的交换分区容量,为 2.0MiB。
free:空闲的交换分区容量,为 972MiB。
关键结论:判断是否需清理缓存,主要看 buffers/cache后值或 available(可用内存)。这两个值:低 = 真缺内存(物理上的缺,叫老板加钱加内存条了!),高 = 不缺(缓存能释放)。
清理前的防提桶跑路操作:sync 同步(别说我没跟你提醒过啊!)
Linux 缓存是异步写入的,部分数据仅在内存未写入硬盘,直接清理会丢失。sync命令可强制将缓存数据同步到硬盘:
sync
等命令执行完成,就可以开始缓存释放了。
Linux通过/proc/sys/vm/drop_caches文件控制缓存释放,向其写入不同数字可释放对应缓存,并且操作需 root 权限:
写入 0:不释放任何缓存(默认值);
写入 1:仅释放文件内容缓存(cached),适合删除大量文件后清理;
写入 2:仅释放目录、文件属性缓存(dentries 和 inodes),适合频繁创建 / 删除文件后使用;写入 3:释放所有缓存(=1+2),需最大程度释放内存时用(如部署大型程序前)。
例如,执行释放所有缓存:
sync # 先同步数据到硬盘,必加!
echo 3 > /proc/sys/vm/drop_caches
效果验证:清理前后分别执行free -h对比,buffers/cache后值明显变少,free值明显增加了:重点提醒:下面这些错误千万别犯!
禁止定时自动清理缓存,设置 cron 定时清理缓存会让系统重新从硬盘读取数据,反而变慢。仅临时需要内存时手动清理,绝不能定时操作。
不执行 sync 就清理 = 数据自杀,跳过 sync 直接清理,会丢失未写入硬盘的临时数据,轻则丢文件,重则数据损坏!
另外,清理缓存≠解决内存不足的根本问题,若清理后 available 很快变低,说明是应用本身占用内存过高(如内存泄漏),需用top或htop查看高内存占用进程,优化程序或升级硬件才是关键。