在日常的开发工作中,经常会遇到服务器的内存空间不足的情况,这个时候,我们需要清理一下服务器的缓存空间。
使用场景
紧急内存回收
在极端情况下,如果系统内存极度紧张且当前没有运行关键服务或任务,管理员可能选择清理缓存以快速回收内存空间,尽管这并非长期解决内存不足的最好方式。
诊断内存问题
如果怀疑系统内存管理存在问题,或者想验证应用程序是否因为过度依赖缓存而导致异常行为,可以清除缓存来复现问题。
开发环境调试
开发人员在进行内核模块开发、文件系统测试或其他与内存使用紧密相关的软件开发时,可能需要重复加载相同的数据而不想受之前缓存内容的影响。
基准测试分析
当需要对磁盘I/O性能进行基准测试时,为了确保每次测试的公平性,会先清空缓存,以便测量在没有缓存帮助下的实际读写速度。
服务器维护
在计划性的系统维护期间,尤其是当即将对大量数据进行处理或移动时,可能会预先清理缓存,以确保所有新的I/O操作都从底层存储开始读取。
参数解释
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页面缓存
2:释放目录项和索引缓存
3:释放所有缓存
sync一下
sync
我们在清理缓存前应该先sync下,系统在操作的过程当中,会把你的操作到的文件资料先保存到buffer中,担心在操作的过程中因为一些原因遗失数据,释放缓存前先将数据写入磁盘。
释放缓存
释放页面缓存
echo 1 > /proc/sys/vm/drop_caches
这个命令是释放页面缓存(page cache)。主要包含最近从磁盘读取的文件内容,以便后续访问时能够快速提供服务。清理这部分缓存意味着下次访问这些文件时将重新从磁盘读取数据。
释放目录项和索引缓存
echo 2 > /proc/sys/vm/drop_caches
该命令已经过时或者在某些Linux内核版本中不支持。早期的一些内核可能用这个值来清除目录项缓存(dentries)和索引(inode)缓存,但现在这两个缓存通常与page cache一起被清理。
释放所有缓存
echo 3 > /proc/sys/vm/drop_caches
这个命令是最常用的选项,它会同时清理页面缓存(page cache)、目录项缓存(dentries)和索引(inode)缓存。这将会最大程度地释放内存,但也可能导致暂时的系统性能下降,特别是正在进行大量I/O操作时。
注意事项
执行这些操作前,请务必谨慎,因为它们不会区分哪些缓存是重要的或是当前正在使用的。
在生产环境中这样操作,可能会对运行中的应用程序,产生负面影响,除非是为了解决特定问题或进行测试,否则不建议随意使用此方法来释放缓存。