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


30

我有一台运行数据库的Ubuntu 8.04服务器和一堆Java应用程序服务器。它的内存配置和用法是:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

我注意到交换每天下午都会增加,晚上会释放一些时间。需求并非全天都一样,并且在不同的时间开始。因此,除了模糊的“午夜”边界外,它是非常随机的。

白天,这台机器上的负载会有所不同。在午夜和6-7 AM之间非常低,直到6-8 PM为止更高(但稳定),然后逐渐下降。

现在我有以下问题:

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

Answers:


25

您描述的交换使用模式听起来并不奇怪。它们与某些具有很少使用页面的永久运行的进程一致。白天,由于活动频繁,很少使用的页面几乎总是处于交换状态。晚上,RAM中有更多的空间供他们使用。

您可以大致了解每个进程在top或中使用了多少种内存htop。默认情况下,它们都不显示交换使用情况,但是都可以配置为(顶部:按下f并打开SWAP列; htop:按下F2,添加NSWAP列)。您可以从cat /proc/12345/vmstat哪里获得有关特定流程的更多信息,其中12345流程ID 在哪里。请注意,“程序正在使用多少交换空间”的定义不是很明确,因为某些页面由多个进程共享。

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


6
我找不到NSWAP列(Ubuntu 16.04:/)。
jjmontes

1
@jjmontes已被删除。我不知道为什么
吉尔(Gilles)'所以

HTOP FAQ称,提交不相信这是可能准确地报告交换使用,而顶部的指标是不准确的。
奥利弗·埃文斯

0

在StackOverflow上,第一个问题(“哪个进程实际上正在使用交换?”)已经有了一个很好的答案。

https://stackoverflow.com/a/7180078/1442301

简而言之,类似tophtop根本不提供有关交换使用情况的准确信息的工具。您应该深入研究该/proc文件夹(在伪文件中/proc/$PID/smaps)以获取更准确的信息。

上面提到的帖子包含一个简短的shell脚本,以一种很好的方式使此信息回显。


0

htop v1.01,我按“S”来添加NSWAP,而不是“F2”柱(如抽动建议的),然后Columns> Available Columns>并F5进行添加。

在此处输入图片说明


我有htop 2.0.1,但看不到NSWAP选项:(
亚当

1
@Adam由于没有可靠的方法来获取此信息,维护人员不再希望显示此列;请参阅为什么htop不像top那样具有SWAP列?
Genjo

0

如果不轮询和分析vmstatfree和这样的工具的输出top,最好的查找位置可能是系统上的root用户或其他用户的crontab。如果系统上的一般负载在某个时间可靠地达到峰值,则cron中可能存在一个流程,这会导致对资源的需求。否则,您始终可以使用该script实用程序创建一个贫民区一次性日志实用程序,该实用程序仅记录到STDOUT的所有内容。

因此,如果我需要做一个一次性的脚本来捕获输出以供以后检查,请在一个终端中键入:

script /tmp/free.txt

然后

while (true); do date; free; sleep 30; done

在另一个航站楼

script /tmp/top.txt

然后

while (true); do date; top -n 1; sleep 30; done

然后第二天早上,扼杀了script调用和匹配的输出topfree

再次,这是一种贫民窟的方法,但听起来您只需要一次性

您可能还想阅读Ubuntu交换指南

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.