Linux中如何有效清理缓存

嘿,你问我如何清除 Linux 中的缓存?上周一位客户问我,他的服务器内存已满,他想清除缓存。
我告诉他,你可以看看是否有效。

---
首先您需要弄清楚要清理的缓存类型。
Linux中主要有以下几类:
1 .页缓存、目录项缓存、inode 缓存 这三类是最常见的。
一旦你弄清楚了一切,请使用这两个命令: sudosync; sudo echo 3 > /proc/sys/vm/drop_caches.请记住,必须先进行同步(synchronized),否则数据将会丢失。
然后echo 3 ,数字3 意味着页面缓存、目录项缓存和inode缓存将被刷新。

2 仅清除目录条目和索引节点缓存 如果您认为页面缓存非常重要(例如,您总是读取大文件),那么您对页面缓存一无所知。
这时候就使用sudo同步。
sudo echo 2 > /proc/sys/vm/drop_caches.数字 2 表示不刷新页缓存,仅删除目录项和 inode。

3 只需清除slab缓存即可 slab 缓存存储内核对象,例如 inode 和 dentry。
如果您的存储空间特别低并且想要释放更多空间,则可以将其删除。
命令是sudosync; sudo echo 1 > /proc/sys/vm/drop_caches.不过我要提醒大家的是,这次清理完成后,必须重新构建内核对象,这可能会影响效率。
一般不常用。
如果你有足够的内存,就不要碰它。

---
清洁前后必须监测效果。
不然怎么知道你删除的是否正确呢?
1 .检查正在使用多少内存 使用 free -h 命令。
这个 -H 使输出使用像 GB/MB 这样的大单位,看起来不错。
您关注可用列,即可用内存。
例如,如果查看 Mem:1 5 Gi 5 Gi 2 Gi 1 Gi 7 Gi 8 Gi,则 8 Gi 就是可用内存。

2 实时查看系统运行情况 使用 vmstat 1 命令。
这个1 就是每秒更新一次数据。
查看 r 列(等待执行的进程数)。
如果这个数字始终很高,则意味着CPU和其他内存问题很严重。
还有一个Free栏(空闲空间,单位KB)可以查看空闲空间是否真的增加了。
还有“si/so”一栏,表示内存和磁盘之间数据交换的速度(KB/s)。
如果清理后这个数字变小,则意味着系统没有将太多数据扔到磁盘上。

---
如果你懒得手动删除,可以设置一个计划任务。

1 .使用定时任务 例如,如果您希望每天凌晨 2 点自动清除所有缓存,请使用 sudo crontab -e 编辑 root 用户的计划任务。
然后为第02 行添加一个sync。
echo 3 > /proc/sys/vm/drop_caches,保存并退出。

---
但是,您需要记住以下几点:
1 删除后,性能可能会下降 清除缓存后,系统下次还得重新从磁盘读取数据,这肯定会花费一些时间,所以短期内可能会感觉性能有点慢。
系统不太好时最好删除很忙,例如在半夜。

2 不要仅仅依靠清除缓存 如果系统旧内存不足,清除缓存只是临时措施。
最好想想为什么还不够。
真的是内存不够吗?然后添加更多内存(购买记忆棒)。
或者是程序出了什么问题,不断耗尽内存?那么就需要寻找程序错误,比如Java程序的JVM参数是否没有调整正确。
或者是系统设置有问题,比如vm.swappiness参数是否调整得太激进。

3 必须获得许可 这些命令必须以 root 权限运行。
未经许可它们无法工作。
普通用户可以使用 sudo 或找到有权为您打开它的人。

---
这个方法什么时候有意义?
1 .腾出一些临时空间 例如,如果系统运行了一段时间,内存使用量明显增加,但你找不到任何消耗内存的程序,则可能是缓存消耗过多。
此时只需将其删除即可。

2 运行性能测试 例如,如果你想测试一个软件的运行速度,你肯定不希望系统缓存给你“作弊”。
如果此时清除缓存,则可以测量更真实的性能数据。

3 执行服务器维护 例如,如果要重新启动或升级服务器,可以在维护之前清除缓存,这可能会加快维护过程。

---
不管怎样,清除缓存要看情况。
监控很重要,不要盲目。
如果系统内存不足,问题还是需要从根本上解决。
由你决定。

如何彻底清理Linux系统中的缓存

同步确保数据一致性,echo3 >/proc/sys/vm/drop_caches清除所有缓存,free-h检查内存,vmstat1 监控缓存,echo3 >/proc/sys/vm/drop_caches简化清理,创建systemd服务自动化,关注性能影响和权限要求。
定期清洁以避免高峰运行。

Linux如何清理缓存

好吧,这个文档真的很详细,感觉就像教科书一样。
不过说实话,这个技巧我用的不多。
通常您的计算机有足够的内存,但如果出现问题,请先查找其他原因。

但是既然你这么认真地组织,我会给你一些反馈。
这一步写得很好,清除缓存的逻辑也解释得很清楚。
我们将解释在每种情况下使用哪个数字。
当您将sync命令与echo操作/proc/sys/vm/drop_caches结合起来时,这个过程实际上是有效的。

但是,请记住,执行此操作时需要非常小心。
正如你所说,清除缓存后,系统必须再次从磁盘读取数据。
在此期间,您的计算机可能会冻结一段时间,尤其是在内存不足的情况下。
2 02 3 年帮朋友做的,清除缓存后,打开浏览器就卡住了,等了好久。
所以,千真万确的“在生产环境中建议在低流量时段工作”,绝对不要在关键时刻使用。

我也同意你所说的“不是根本解决方案的解决方案”。
如果您的计算机不断警告您内存不足,最好的办法是添加更多内存模块或关闭某些软件,看看软件本身是否消耗过多内存或您的系统是否存在问题。
清除缓存直接治标不治本。

还指定了权限,需要sudo。
但是,就个人而言,如果您不是系统管理员,请不要轻易乱搞。
否则,系统会混乱。

总的来说,这份文档写得很好并且包含完整的信息。
操作时要小心,小心不要让你的系统崩溃。
无论如何,这取决于你。
我仍在尝试弄清楚这是否有帮助。