什么在使用我的交换 (Ubuntu)?

Kon*_*rus 34 memory swap ubuntu

我有一个运行数据库和一堆 Java 应用程序服务器的 Ubuntu 8.04 服务器。其内存配置和使用情况为:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788
Run Code Online (Sandbox Code Playgroud)

我注意到交换每天下午都会增加,并在晚上的某个时间释放。每一天的需求都不一样,而且开始的时间也不同。所以它是非常随机的,除了模糊的“下午 - 晚上”边界。

这台机器上的负载在白天变化。它在午夜和早上 6 点到 7 点之间非常低,在下午 6 点到 8 点之前要高得多(但稳定),然后逐渐下降。

现在我有以下问题:

  1. 如何查看哪些进程正在使用交换?
  2. 为什么它更喜欢换出而不是从缓存中取出一些内存?

Gil*_*il' 28

您描述的交换使用模式听起来并不奇怪。它们与具有很少使用的页面的一些永久运行的进程一致。白天,由于活跃度很高,很少使用的页面几乎总是在交换中。到了晚上,RAM 中有更多空间供它们使用。

您可以大致了解每个进程在top或 中使用了多少各种类型的内存htop。默认情况下都不显示交换使用情况,但都可以配置为(顶部:按下f并打开SWAP列;htop:按下F2,添加NSWAP列)。你可以得到关于与特定进程的详细信息cat /proc/12345/vmstat,其中12345是进程ID。请注意,“程序使用了多少交换空间”并没有完全明确定义,因为一些页面被多个进程共享。

RAM 有两种主要的竞争者:进程内存(可以换出)和磁盘缓存(可以从文件中重新读取)。没有理由总是将进程内存优先于磁盘缓存:换出进程内存中很少使用的部分比一次又一次地将文件读入内存要好。您给出的数字,大约一半(比如 30%–70%)的内存专门用于磁盘缓存,对于具有合理数量的 RAM 来执行它们应该执行的任务的系统来说是典型的。

  • 我找不到 `NSWAP` 列(Ubuntu 16.04 :/)。 (9认同)
  • [htop FAQ](https://hisham.hm/htop/index.php?page=faq) 指出作者认为不可能准确报告交换使用情况,并且 top 的指标不准确。 (4认同)
  • @jjmontes 它已被[删除](https://github.com/hishamhm/htop/commit/be1700cf9479f4199bb3810db831da943691b8f7#diff-b3f037d6e92f574afdf6f2e6934b)。我不知道为什么。 (2认同)