回显回显如何不仅仅在 cronjob 中回显?

回显回显如何不仅仅在 cronjob 中回显?

我正在阅读本文从我的新 Linux 虚拟机中清除缓冲区/缓存,因为它们占用了我 RAM 的 1/3,所以我运行了以下命令:

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

这立即解决了问题,所以我将其添加到我的 cronjob 中。该文章说创建一个clearcache.sh包含以下内容的文件:

#!/bin/bash
# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"

发生什么事了sync?不需要运行它才能工作吗?为什么会在 cronjob 中回显 echo 来运行该命令?我在命令行上尝试了这个,正如预测的那样,它只是回显了该命令。

# echo "echo 3 > /proc/sys/vm/drop_caches"
echo 3 > /proc/sys/vm/drop_caches

这是我不知道的某种神奇的 cron 功能吗?

答案1

你完全没有理解 Linux 如何使用 RAM 的要点/哲学。

如果 RAM 完全空闲,那么 RAM 就是一种浪费的资源,并且操作系统必须访问 HDD 来获取文件,因此在 Linux 中,它会维护缓冲区和缓存,这些缓冲区和缓存会大量消耗 RAM 以提高性能。

该 RAM 可以随时被进程使用(它实际上是缓存)。

与访问(实际)内存相比,从磁盘读取数据非常慢。此外,在相对较短的时间内多次读取磁盘的同一部分是很常见的。例如,人们可能首先阅读一封电子邮件,然后在回复时将这封信读入编辑器,然后在将其复制到文件夹时让邮件程序再次读取它。或者,考虑命令 ls 在具有许多用户的系统上运行的频率。通过仅从磁盘读取信息一次,然后将其保留在内存中直到不再需要,可以加快除第一次读取之外的所有读取速度。这称为磁盘缓冲,用于此目的的内存称为缓冲区高速缓存。

参考: http://www.tldp.org/LDP/sag/html/buffer-cache.html

例子

$ free -hw
              total        used        free      shared     buffers       cache   available
Mem:           992M         76M        202M         12M         68M        645M        739M
Swap:          2.0G          0B        2.0G

在此输出中,我的 VM 有约 992MB,其中似乎只有 202MB 可用。但这就是许多人感到困惑/误导的地方。

这个Linux系统实际上有739MB空闲空间(可用栏)。

这怎么可能?

简单的。 Linux 通过将文件、库等保存在 RAM(缓冲区和高速缓存)中来使用 RAM 来提高性能,而不必每次都使用慢速 HDD 来检索这些文件。

Linux 内核以这种方式使用缓冲区和缓存,并且在任何时候,如果内存管理器(内核的一部分)感知到进程需要越来越多 RAM 的压力,内核实际上可以删除正在处理的任何数据。缓存在这里以立即给自己更多的 RAM。

你的问题

至于你的问题与剧本有关clearcache.sh。答案很简单。这是写这篇文章的人的错字。应该是这样的:

$ echo "echo 3 > /proc/sys/vm/drop_caches" | sudo sh

他们可能从我对这个问题的 U&L Q&A 答案中错误地复制/粘贴了:如何清空 Linux 系统上的缓冲区和缓存?

参考

相关内容