这个问题回答了关于如何找到缓存的一部分的问题。但是,在fincore可执行文件中,您必须传递文件名以检查它是否是缓存的一部分。
是否有工具或方法可以在不传递文件名的情况下查找属于缓存内存的所有条目。
PS:我们在嵌入式系统中运行它,运行一个 for 循环并将所有文件传递给fincore它自己是一个更耗时和内存消耗的过程。因此,我正在寻找其他方法。
我知道这是一个蹩脚的问题,但我想了解为什么 CentOS 在某些进程停止时会消耗我的物理内存。假设我打开了一个 10GB 的文件,当我完成该过程并关闭文件时,它消耗了 10GB 的内存和缓冲区,然后 CentOS 仍然保留了我的 10GB 内存。
当我运行free命令时,它给了我以下详细信息:
11.4 GB are used
in buffers: 6336
in cached: 49168
-/+ buffers/cache: 11.4GB used
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下解决方案释放内存时:
设置 /proc/sys/vm/drop_caches 以清除缓存
-/+ 缓冲区/缓存:仍保留 11.4 GB。
我记得,从我使用 Windows Vista/7 的日子开始,有一个名为 memclear 或 memclean 的工具可以通过调用 NT 垃圾收集 API 来释放一些内存。可能它也清除了缓存。很多时候,当我使用 Ubuntu 时,系统会在一段时间后停留在几 GB 分配的内存,而当我执行诸如图像编辑之类的内存密集型任务时,我必须等待很长时间才能交换额外的 GB。
有没有办法强制内核 GC 之类的东西释放真正没有使用的内存?(当我启动时,内存消耗小于1GB)
我正在阅读这篇关于从我的新 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 功能吗?