当前位置: 首页 > 科技观察

如何清除Linux上的内存Cache、Buffer和swap空间

时间:2023-03-21 10:56:10 科技观察

与任何其他操作系统一样,GNU/Linux实现的内存管理不仅有效,而且更好。但是,如果任何进程正在占用您的内存并且您想清除它,Linux提供了一种刷新或清除RAM缓存的方法。Linux中如何清除缓存(Cache)?每个Linux系统都有三个选项可以在不中断任何进程或服务的情况下清除缓存。(LCTT译注:Cache,译为“缓存”,指的是CPU和内存之间的缓存。Buffer,译为“缓冲区”,指的是在写入磁盘之前存储在内存中的内容。在本文中,Buffer和Cache都有会指的时候。)只清除页面缓存(PageCache)#sync;echo1>/proc/sys/vm/drop_caches清除目录条目和inode#sync;echo2>/proc/sys/vm/drop_caches清除页面缓存、目录项和inode#sync;echo3>/proc/sys/vm/drop_caches上面命令的解释:sync会刷新文件系统缓冲区(buffer),命令之间用“;”分隔并顺序执行,执行顺序中的shell会在下一个命令之前等待命令的终止。如内核文档中所述,写入drop_cache将清空缓存而不会杀死任何应用程序/服务,而echo命令会完成写入文件的工作。如果必须清除磁盘缓存,第一个命令在企业和生产环境中是最安全的,“...echo1>...”只会清除页面缓存。除非您确切知道自己在做什么,否则不建议在生产中使用上面的第三个选项“...echo3>...”,因为它会清除缓存的页面、目录条目和索引节点。在Linux上释放内核可能使用的缓冲区和缓存是个好主意吗?当您设置了很多设置并想要检查效果时,如果它实际上是专门针对I/O范围的基准测试,那么您可能想要清除缓冲区和缓存。您可以如上所示删除缓存而无需重新启动系统(即无需停机)。Linux的设计方式是先查看磁盘缓存,然后再查看磁盘。如果它在缓存中找到资源,则不会将请求发送到磁盘。如果我们清除缓存,磁盘缓存就不起作用了,系统会去磁盘上寻找资源。此外,清除缓存时也会降低系统速度,系统会将每个请求的资源重新加载到磁盘缓存中。现在,我们将创建一个shell脚本,通过cron计划作业在每天下午2点自动清除RAM缓存。如下创建一个shell脚本clearcache.sh,并在其中添加如下几行:#!/bin/bash#注意这里我们使用“echo3”,但是不建议在生产环境中使用,应该使用“echo1"echo"echo3>/proc/sys/vm/drop_caches"给clearcache.sh文件设置执行权限#chmod755clearcache.sh现在,只需要在需要清除内存缓存时调用该脚本即可。现在设置一个每天下午2点定时任务清空RAM缓存,打开crontab进行编辑。#crontab-e添加以下行,保存并退出。03***/path/to/clearcache.sh有关如何创建计划任务的更多详细信息,您可以查看我们的文章11计划任务示例。自动清除生产服务器上的RAM是个好主意吗?不!它不是。考虑这样一种情况,您已安排脚本在每天下午2点清除内存缓存。然后脚本将执行并刷新您的内存缓存。在某一天,由于某种原因,您网站的在线用户可能比预期更多地向您的服务器请求资源。此时,计划的脚本运行并清除缓存中的所有内容。当所有用户都从磁盘读取时,这会使服务器崩溃并损坏数据库。所以,只有在必要时和你期望的时候才清除缓存,否则你就是一个愚蠢的系统管理员。如何清除Linux中的交换空间?如果要清除被移除的空间,可以运行以下命令:#swapoff-a&&swapon-a另外,在了解风险后,可以将上述命令添加到cron。现在,我们将以上两个命令合并为一个命令,并编写正确的脚本来同时清除RAM缓存和交换空间。#echo3>/proc/sys/vm/drop_caches&&swapoff-a&&swapon-a&&printf'\n%s\n''Ram-cacheandSwapCleared'或者su-c'echo3>/proc/sys/vm/drop_caches'&&swapoff-a&&swapon-a&&printf'\n%s\n''Ram-cacheandSwapCleared'在测试上述命令之前,我们在执行脚本之前和之后运行“free-m”检查缓存。就是这样,如果您喜欢这篇文章,请不要忘记给我们您的宝贵意见,让我们知道,您认为清除内存缓存和缓冲区在企业和生产环境中是个好主意吗?