如何在 Linux 上清除缓存如何在 Linux 上清除缓存如何在 Linux 上清除缓存如何在 Linux 上清除缓存
  • 业务
  • 产品
  • 技术
  • 行业
  • 目标
  • 支持
  • 关于
  • 联系我们
  • 登录
✕

如何在 Linux 上清除缓存

发表 admin at 2025年2月28日
类别
  • Linux
标签

Linux文件系统缓存(Page Cache)用于使IO操作更快。在某些情况下,管理员或开发人员可能需要手动清除缓存。在本文中,我们将解释 Linux 文件系统缓存的工作原理。然后我们将演示如何监控缓存使用情况以及如何清除缓存。我们将做一些简单的性能实验来验证缓存是否按预期工作,并且缓存刷新和清除过程也按预期工作。

Linux 文件系统缓存的工作原理

内核保留一定量的系统内存用于缓存文件系统磁盘访问,以使整体性能更快。 Linux中的缓存称为页面缓存。页面缓存的大小是可配置的,并使用大量默认值来缓存大量磁盘块。缓存的最大大小以及何时从缓存中逐出数据的策略可以通过内核参数进行调整。 Linux 缓存方法称为回写式缓存。这意味着,如果数据写入磁盘,则会将其写入内存到缓存中,并在缓存中标记为脏,直到同步到磁盘为止。内核维护内部数据结构,以优化当缓存中需要更多空间时从缓存中逐出哪些数据。

在Linux读系统调用期间,内核将检查请求的数据是否存储在缓存中的数据块中,如果缓存命中成功,则数据将从缓存中返回,而不会对磁盘系统进行任何IO操作。对于缓存未命中,将从 IO 系统获取数据,并根据缓存策略更新缓存,因为可能会再次请求相同的数据。

当内存使用量达到特定阈值时,后台任务将开始将脏数据写入磁盘,以确保清除内存缓存。这些可能会对内存和 CPU 密集型应用程序的性能产生影响,并且需要管理员和/或开发人员进行调整。

使用Free命令查看缓存使用情况

我们可以从命令行使用 free 命令来分析系统内存和分配给缓存的内存量。参见下面的命令:

# free -m

我们从上面的 free 命令中看到,该系统上有 7.5 GB 的 RAM。其中仅使用了 209 MB,还有 6.5 MB 是免费的。缓冲区高速缓存使用了 667 MB。现在,我们尝试通过运行命令来生成 1 GB 的文件并读取该文件来增加该数字。以下命令将生成大约 100MB 的随机数据,然后将该文件的 10 个副本一起附加到一个 large_file 中。

# dd if=/dev/random of=/root/data_file count=1400000
# for i in `seq 1 10`; do echo $i; cat data_file >> large_file; done

现在我们将确保读取这个 1 Gig 文件,然后再次检查 free 命令:

# cat large_file > /dev/null
# free -m

我们可以看到缓冲区高速缓存的使用量从 667 兆字节增加到 1735 兆字节,缓冲区高速缓存的使用量增加了大约 1 千兆字节。

Proc Sys VM 删除缓存命令

Linux 内核提供了一个删除缓存的接口,让我们尝试一下这些命令,看看对空闲设置的影响。

# echo 1 > /proc/sys/vm/drop_caches
# free -m

我们可以从上面看到,大部分缓冲区高速缓存分配已通过此命令释放。

删除缓存有效的实验验证

我们可以对使用缓存读取文件进行性能验证吗?让我们读取该文件并将其写回 /dev/null 以测试从磁盘读取该文件需要多长时间。我们将使用time命令来计时。我们在使用上述命令清除缓存后立即执行此命令。

读取文件花了 8.4 秒。现在让我们再读一遍,该文件应该位于文件系统缓存中,看看现在需要多长时间。

繁荣!与未缓存文件时的 8.4 秒相比,读取时间仅为 0.2 秒。为了验证这一点,我们首先清除缓存,然后读取文件两次,再次重复此操作。

它按预期完美运行。非缓存读取为 8.5 秒,缓存读取为 0.2 秒。

结论

页缓存在 Linux 系统上自动启用,并通过在缓存中存储最近使用的数据来透明地提高 IO 速度。如果您想手动清除缓存,可以通过向 /proc 文件系统发送 echo 命令来指示内核删除缓存并释放用于缓存的内存来轻松完成。本文上面显示了运行该命令的说明,还显示了刷新前后缓存行为的实验验证。

©2015-2025 Norria Group support@norria.com