如何找出进程正在使用交换空间?

sec*_*ask 10 memory linux swap

我有一个 linux 服务器顶部报告使用了大约 9GB 的交换: 最佳

但我无法弄清楚它在哪里使用交换,一些谷歌结果说 top -O命令后跟p将按进程显示交换使用情况。但是如上图所示,对 SWAP 列进行简要总结表明使用了 > 10GB 的交换,那么交换使用的 9GB 数字来自哪里?

Top 报告缓冲区使用了大约 96492kb 的内存。我可以做些什么来利用它,而不是使用交换?

Fli*_*mzy 6

有可能多个程序将使用同一个交换区,因此会报告两次。

没有必要试图告诉 Linux 使用缓冲区而不是交换区——它已经很聪明地知道它在做什么。如果您使用 9gb 的交换空间和 9gb 的缓冲区,那是一件好事……这意味着 Linux 意识到加载到内存中的 9gb 内容没有被积极使用,因此将其交换到磁盘更有效,以便您的缓冲区可以变大,并提高您的性能。


编辑:如果您将每个进程使用的所有内存加起来,您将获得比物理 RAM 多得多的内存。这是由于共享库被多个程序使用,以及 Linux 处理分叉的方式——它不会复制内存中的整个程序,它只会复制两个实例之间不同的部分。在某些情况下,视频内存可以显示为 X 进程的一部分——我认为旧的 Voodoo3 卡就是这样做的。在其他情况下,“幻影”内存也可能出现在顶部。