谁在使用交换内存以及为什么?

谁在使用交换内存以及为什么?

我的数据库服务器使用了 191MB 的交换空间 - 但还显示 182MB自由的内存

该盒子是一个专用的 MySQL 服务器,运行 Debian Lenny。

我如何确定谁以及为什么填充交换空间而不是使用可用 RAM?

答案1

输入top,然后点击f编辑可见字段,点击p显示交换使用情况,然后点击Enter返回程序显示。使用Shift+<>使其按交换使用情况排序。

Linux 根据在短期内需要引用数据的可能性(在 Linux 的拟人化观点中)从 RAM 交换数据。您可以更改交换性以增加/减少发生这种情况的可能性。

答案2

这个问题不太容易回答——看这里:https://help.ubuntu.com/community/SwapFaq

您可以使用top命令来查看交换使用情况,输入man top或谷歌搜索。

至于原因——一种可能的情况如下。假设您有 1GB 的 RAM。然后您将价值 2GB 的应用程序(包括操作系统)加载到其中。您将使用 1GB 的 RAM 和 1GB 的交换空间。然后您卸载 1.5GB 的应用程序。您会假设您将有 0.5GB 的可用 RAM 和所有可用的交换空间。然而,情况可能并非如此。例如,如果您加载了 3 个应用程序:

  • A-1 GB,
  • B - 900 MB
  • C - 100 MB

然后主动使用 A,B 和 C 可能会被交换到磁盘,以使 A 使用 RAM,从而提高速度。当您关闭 A 并切换到 C 时,您将使用 100 MB RAM,而 B 仍然被交换出去(使用了 900 MB 交换空间),因为它是不需要的。

简单来说 - 内核会尝试以它认为最有效的方式使用 RAM 和交换。在仍有可用 RAM 时使用交换并不一定意味着您的系统运行速度比应有的慢。

答案3

free -m

查看 +/- 缓冲区行,了解您的真实 RAM 减去文件系统缓冲区。现代操作系统将常用文件加载到内存中,内核将根据需要释放它们。

例如

             total       used       free     shared    buffers     cached
Mem:          3483       1702       1780          0        299        778
-/+ buffers/cache:        623       2859
Swap:         3999          0       3999

运行 top 时,我会看到有 1.7GB 的可用内存,但如果我查看 free -mi,就会发现实际上有 2.8GB 的​​可用内存。另外 1.1GB 是文件系统缓存。

答案4

关于交换内存的一点,为了支持ErikA对James的回答的评论:

看到一些交换使用情况并不是一件坏事。正如 James 所说,内核会适时地换出不太可能使用的内存页面。这会释放 RAM 供其他可能需要它的应用程序使用,并且只会在极少数情况下导致性能下降。

从 RAM 中交换出的数据将同时存在于 RAM 和交换磁盘中,直到 RAM 被用作其他用途,因此它们很像 mmap 文件。据我了解,如果某个进程在回收之前决定使用此数据,则无需再次交换。交换通常是好的,但有两个主要原因可能导致您不想要它:

  1. 您正在尝试节省电力:急切地换出通常会增加磁盘旋转量,因为不需要某些换出属性;
  2. 交换可能会提高您可能不关心其性能的进程的速度,但却以牺牲存在延迟问题的进程为代价。

可以使用 来消除机会性交换echo 0 > /proc/pid/vm/swappiness

相关内容