Pat*_*ter -4 cron memory synchronization
我正在阅读这篇关于从我的新 Linux VM 中清除缓冲区/缓存的文章,因为它们占用了我 1/3 的 RAM,所以我运行了这个:
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"
Run Code Online (Sandbox Code Playgroud)
怎么了sync
?不需要运行它才能工作吗?为什么在 cronjob 中回显 echo 会运行该命令?我在命令行上尝试了这个,正如预测的那样,它只是回显了命令。
# echo "echo 3 > /proc/sys/vm/drop_caches"
echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
这是我不知道的某种神奇的 cron 功能吗?
您完全忽略了 Linux 如何使用 RAM 的要点/理念。
如果 RAM 是完全免费的并且操作系统必须访问 HDD 以获取文件,则 RAM 是一种浪费资源,因此在 Linux 中,它维护缓冲区和缓存,这些缓冲区和缓存会积极使用 RAM 以提高性能。
进程可以随时使用此 RAM(它实际上是缓存)。
与访问(真实)内存相比,从磁盘读取非常慢。此外,在相对较短的时间内多次读取磁盘的同一部分是很常见的。例如,人们可能首先阅读一封电子邮件,然后在回复时将信件读入编辑器,然后在将其复制到文件夹时让邮件程序再次阅读。或者,考虑在具有许多用户的系统上运行命令 ls 的频率。通过只从磁盘读取一次信息,然后将其保存在内存中直到不再需要,除了第一次读取之外,其他所有内容都可以加快速度。这称为磁盘缓冲,用于此目的的内存称为缓冲区缓存。
$ free -hw
total used free shared buffers cache available
Mem: 992M 76M 202M 12M 68M 645M 739M
Swap: 2.0G 0B 2.0G
Run Code Online (Sandbox Code Playgroud)
在此输出中,我的 VM 有 ~992MB,其中似乎只有 202MB 可用。但这就是许多人感到困惑/误导的地方。
这个 Linux 系统实际上有 739MB 可用空间(可用列)。
简单的。Linux 使用 RAM 通过将文件、库等保存在 RAM(缓冲区和缓存)中来提高性能,而不是每次都必须伸出速度较慢的 HDD 来检索这些文件。
Linux 内核以这种方式使用缓冲区和缓存,并且在任何时候,如果内存管理器(内核的一部分)感知到进程需要越来越多的 RAM 的压力,内核可以从字面上删除任何正在处理的数据缓存在这里以立即给自己更多的内存。
至于您的问题与clearcache.sh
脚本有关。答案很简单。这篇文章的作者写错了。应该是这样的:
$ echo "echo 3 > /proc/sys/vm/drop_caches" | sudo sh
Run Code Online (Sandbox Code Playgroud)
他们可能从我对这个问题的 U&L 问答中错误地复制/粘贴:你如何清空 Linux 系统上的缓冲区和缓存?