如何获取 *nix 系统上每个进程使用的缓存

如何获取 *nix 系统上每个进程使用的缓存

我想知道每个进程的缓存使用情况是多少。有办法做到吗?我目前在 Ubuntu 上。

问题是,我的电脑填满了整个缓存,然后当我需要 RAM 时就开始交换而不是释放缓存。这不是一个理想的情况。了解什么流程“需要”这一切将会真正有帮助。我怀疑 ESET AV,因为它的“好感度”在htop. (是的,我需要 AV,不,这不是我的决定)

正如您所看到的,有 16GB 的缓存(根据 ,其中有一小部分是 buff htop)。这是大约 45 分钟后的情况uptime。没有交换任何内容,但有时它只是交换 5-7GB 的数据(当我启动虚拟机或类似的东西时)。

用户名@主机名:[~]$ free -h
              可用的免费共享缓冲区/缓存总数
内存:23Gi 6,4Gi 354Mi 4,6Gi 16Gi 11Gi
交换:23Gi 3,0Mi 23Gi

不管怎样,即使没有这个问题,准确地知道谁在缓存以及缓存了多少也是一个很好的信息。

答案1

不会跟踪每个进程的缓存使用情况 - 页面存在于缓存中,并且可以由系统上的任何进程使用。

扫描大量文件的进程(例如防病毒扫描程序或备份工具)通常会产生您所看到的症状:如果交换可用,则不断读取大量文件将驱逐其他页面进行交换。您可以考虑以下几点来提高系统性能:

如果你想保留一个大的交换分区(例如用于冬眠;目标是已安装内存的 2/5,尽管这不是硬性限制),您可以减少vm.swappiness因此内核会认为交换比逐出页面缓存页面更昂贵,因此倾向于减少其缓存使用而不是增加其交换使用。

相关内容