网站搜索

如何在 Linux 上清除 RAM 内存缓存、缓冲区和交换


与任何其他操作系统一样,GNU/Linux 高效地实现了内存管理,甚至更高效。但是,如果任何进程正在占用您的内存并且您想要清除它,Linux 提供了一种刷新或清除 RAM 缓存的方法。

在本文中,我们将探讨如何清除 Linux 系统上的 RAM 内存缓存、缓冲区和交换空间以提高整体性能。

了解 RAM 内存高速缓存、缓冲区和交换空间

让我们探讨一下 Linux 系统上的 RAM 内存缓存、缓冲区和交换空间。

内存缓存

RAM内存缓存是内核用来保存定期访问的数据的机制。虽然这可以提高系统响应能力,但过载的缓存可能会导致保留过时的数据,从而影响性能。

缓冲

缓存类似,缓冲区临时保存数据,但用途不同。缓冲区存储CPU和硬盘等组件之间传输的数据,促进顺畅的通信。然而,过多的缓冲数据会降低系统速度。

交换空间

交换空间是硬盘上分配的区域,当物理 RAM 耗尽时,它充当虚拟内存。虽然它可以防止由于内存不足而导致系统崩溃,但如果过度使用,它可能会降低系统速度。

清除 Linux 中的缓存、缓冲区和交换空间

在某些情况下,您可能需要清除缓存缓冲区交换空间,如下所述。

如何在 Linux 中清除 RAM 内存缓存?

每个 Linux 系统都有三个选项可以在不中断任何进程或服务的情况下清除缓存。

清除页面缓存

1.若仅清除PageCache,可以使用以下命令,该命令将专门清除PageCache,帮助释放内存资源。

sudo sync; echo 1 > /proc/sys/vm/drop_caches

清除目录和索引节点

2.要仅清除dentryinodes,您可以使用以下命令,该命令将同步文件系统并清除dentries和inode,通过释放缓存的目录和索引节点信息来提高系统性能。

sudo sync; echo 2 > /proc/sys/vm/drop_caches

清除PageCache、Dentries和Inode

3.要清除pagecachedentriesinodes,可以使用以下命令,该命令将同步文件系统并清除页面缓存、目录项和索引节点,有助于释放内存并提高系统性能。

sudo sync; echo 3 > /proc/sys/vm/drop_caches 

以下是对上述命令各部分的解释:

  • sudo 用于以超级用户身份执行命令。
  • sync 将刷新文件系统缓冲区。
  • <代码>“; ” 分号用于分隔单行上的多个命令。
  • echo 3 > /proc/sys/vm/drop_caches 命令用于删除页面缓存,这是最近访问的文件的临时存储区域。

注意drop_caches 文件控制应清除哪种类型的缓存数据,其值如下:

  • 1 – 仅清除页面缓存。
  • 2 – 清除目录和索引节点。
  • 3 – 清除页面缓存、目录项和索引节点。

正如内核文档中提到的,写入 drop_caches 将清理缓存,而不会终止任何应用程序/服务,命令 echo 正在执行写入文件的工作。

如果您必须清除磁盘缓存,第一个命令在企业和生产中是最安全的,如 “...echo 1 > ...。 ” 只会清除 PageCache

在您知道自己在做什么之前,不建议在生产中使用上面的第三个选项“...echo 3 > ”,因为它会清除pagecache目录,索引节点

Linux 中如何清理交换空间?

要清除交换空间,您可以使用带有 -a 选项的 swapoff 命令,这将禁用所有交换分区。

sudo swapoff -a

然后,通过运行以下命令将其恢复,这将激活所有交换分区。

sudo swapon -a

在 Linux 中释放缓冲区、缓存和交换是否明智?

一般来说,在 Linux 中手动释放 Linux 内核可能使用的 BufferCache 并不是一个好主意,Linux 内核旨在有效地管理这些资源,手动清除它们可能会破坏系统性能。

但是,在极少数情况下,您可能需要清除缓冲区缓存,例如您遇到严重的内存压力并且无法通过其他方式释放内存。在这些情况下,您应该谨慎行事并注意潜在的性能影响。

同样,在正常情况下,清除 Linux 中的交换空间通常不是例行公事或不建议的做法。

自动内存优化

要自动化该过程并定期清理内存,您可以设置 cron 作业以按指定的时间间隔运行命令。

打开 crontab 配置。

crontab -e

添加以下行以每天午夜清除缓存、缓冲区和交换空间:

0 0 * * * sudo sync; echo 3 > /proc/sys/vm/drop_caches
0 0 * * * sudo echo 1 > /proc/sys/vm/drop_caches
0 0 * * * sudo sync; echo 2 > /proc/sys/vm/drop_caches
0 0 * * * sudo swapoff -a && sudo swapon -a

有关使用 cron 调度作业的更多信息,您可能需要参考我们的文章“11 Cron 调度作业”。

是否建议在 Linux 生产服务器上清除 RAM 缓存?

不它不是。考虑这样一个场景:您安排了一个脚本在每天凌晨 2 点清除 RAM 缓存。每天凌晨 2 点,该脚本都会执行,刷新 RAM 缓存。然而,有一天,您网站上的在线用户数量出乎意料地高,这对您的服务器资源提出了巨大的需求。

同时,计划的脚本运行并清除缓存中的所有内容。现在,所有用户都从磁盘检索数据,这可能会导致服务器崩溃和数据库损坏。因此,只有在必要时才清除 RAM 缓存,并注意您的操作。否则,您将面临成为 Cargo Cult 系统管理员的风险。

结论

高效的内存管理对于Linux系统的顺利运行至关重要。定期清除RAM内存缓存、缓冲区和交换空间可以显着提高系统性能。通过了解这些机制并使用所提供的命令,您可以使 Linux 系统保持最佳运行状态。

目前为止就这样了。如果您喜欢这篇文章,请记得在评论中分享您的宝贵反馈。请告诉我们您对在生产和企业环境中清除 RAM 缓存和缓冲区的好方法的看法。