我确实遇到了与这篇文章类似的问题: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}'
这将为您提供一个值,即所有进程正在使用的内存总量。