如何获取 Linux 中真实的缓存/预取内存使用情况?

如何获取 Linux 中真实的缓存/预取内存使用情况?

我确实遇到了与这篇文章类似的问题:https://askubuntu.com/questions/41778/computer-freezing-on-almost-full-ram-possibly-disk-cache-problem

总结一下:看起来预取/缓存/分页的 RAM 回收花费的时间太长了,所以我一直担心磁盘会进行疯狂的磁盘读取,导致 PC 挂起并迫使我重新启动。


因此,我对这个问题进行了更深入的研究,并得到了有用的命令:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

这确实会降低预取的 RAM......直到一定程度,因为仍然有一些剩余,这似乎是一个“静态”部分。

我注意到,将其添加到无预取 RAM 使用量中与 top 相匹配用过的内存。

但是,这并不能告诉我我使用了多少“静态”预取 RAM。了解这一点可以让我在即将达到总 RAM 数量时,给 Linux 的分页缓存卸载留出足够的时间来完成其工作。

例如:缓存约为 1000 MiB,执行“echo 3 | sudo tee /proc/sys/vm/drop_caches”后降至约 700 MiB;约 700 MiB 是我需要知道的预取 RAM 的“静态”部分。

所以我的问题是:如何获取预取/缓存/分页 RAM 使用情况的真正“静态”部分?


附言:

另一方面,有没有办法只输出每个进程(甚至是 root 进程)使用的总 RAM(例如 htop 的内存价值) ?

答案1

您可以使用以下命令找到所有用户的每个进程使用的RAM:

ps -eo pid,command,rss,user

这按顺序给出了进程 ID、命令、使用的内存和进程的用户。

如果你想要知道所有进程使用的 RAM 总量,可以使用以下命令

free

如果您想要计算每个进程使用的内存总量,请使用以下代码:

ps -eo rss | awk '{sum+=$1} END {print sum}'

这将为您提供一个值,即所有进程正在使用的内存总量。

相关内容