使用 vmstat 监控虚拟内存
物理内存——实际安装的 RAM——是任何系统上的有限资源。 Linux 内存处理程序通过在可能的情况下释放部分物理内存来管理这种有限资源的分配。
当然,所有进程都使用内存,但每个进程并不总是需要其所有已分配的内存。内核利用这一事实,通过将进程的部分或全部内存写入磁盘,直到再次需要时,来释放物理内存。
内核使用分页和交换来执行此内存管理。分页是指将进程内存的部分(称为页)写入磁盘。严格来说,交换是指将整个进程(而不仅仅是部分)写入磁盘。在 Linux 中,真正的交换极其罕见,但术语“分页”和“交换”通常可以互换使用。
当页面写入磁盘时,该事件称为换出(page-out),当页面返回到物理内存时,该事件称为换入(page-in)。当内核需要一个页面,但发现它在物理内存中不存在(因为它已被换出),并从磁盘重新读取它时,就会发生页错误(page fault)。
换入是常见且正常的,无需担心。例如,当应用程序首次启动时,其可执行映像和数据会被换入。这是正常行为。
然而,换出可能是出现问题的迹象。当内核检测到内存不足时,它会尝试通过换出来释放内存。尽管这种情况可能会不时短暂发生,但如果换出频繁且持续,内核可能会达到一个临界点,即它实际上花费更多时间来管理分页活动,而不是运行应用程序,并且系统性能会受到影响。这种糟糕的状态被称为抖动(thrashing)。
使用交换空间本身并不是坏事。相反,有问题的是密集的页面活动。例如,如果内存密集型应用程序处于空闲状态,则当另一个大型作业处于活动状态时,可以将其部分内容搁置。属于空闲应用程序的内存页面最好被搁置,以便内核可以将物理内存用于磁盘缓冲。
vmstat,顾名思义,报告虚拟内存统计信息。它显示有多少虚拟内存,有多少是空闲的以及分页活动。最重要的是,您可以观察换入和换出的发生。这非常有用。
要监控系统上的虚拟内存活动,最好使用带有延迟的 vmstat。延迟是更新之间的时间间隔(秒)。如果您不提供延迟,vmstat 会报告自上次启动以来的平均值并退出。建议的延迟间隔为五秒。
要以五秒延迟运行 vmstat,请输入
vmstat 5
您还可以指定计数,指示您希望在 vmstat 退出之前看到的更新次数。如果您不指定计数,则计数默认为无限大,但您可以使用 Ctrl-C 停止输出。
要以五秒间隔运行 vmstat 十次更新,请输入
vmstat 5 10
这是一个没有分页活动的系统示例
procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 0 0 0 29232 116972 4524 244900 0 0 0 0 0 0 0 0 0 0 0 0 29232 116972 4524 244900 0 0 0 0 2560 6 0 1 99 0 0 0 29232 116972 4524 244900 0 0 0 0 2574 10 0 2 98
所有字段都在 vmstat 手册页中进行了解释,但本文最重要的列是 free、si 和 so。 free 列显示可用内存量,si 显示换入,so 显示换出。在此示例中,so 列始终为零,表示没有换出。
由于历史原因,使用缩写 so 和 si 而不是更准确的 po 和 pi。
这是一个具有分页活动的系统示例
procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id . . . 1 0 0 13344 1444 1308 19692 0 168 129 42 1505 713 20 11 69 1 0 0 13856 1640 1308 18524 64 516 379 129 4341 646 24 34 42 3 0 0 13856 1084 1308 18316 56 64 14 0 320 1022 84 9 8
请注意非零的 so 值,表示物理内存不足,内核正在换出。您可以使用 top 和 ps 来识别占用最多内存的进程。
您还可以使用 top 来显示内存和交换统计信息。以下是典型 top 报告的最上面部分的示例
14:23:19 up 348 days, 3:02, 1 user, load average: 0.00, 0.00, 0.00 55 processes: 54 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 0.0% user, 2.4% system, 0.0% nice, 97.6% idle Mem: 481076K total, 367508K used, 113568K free, 4712K buffers Swap: 1004052K total, 29852K used, 974200K free, 244396K cached
有关 top 的更多信息,请参阅 top 手册页。
您的系统使用一些交换空间不一定是坏事。但是,如果您发现系统经常物理内存不足,并且分页导致性能下降,请添加更多内存。如果您无法添加更多内存,请在一天中的不同时间运行内存密集型作业,避免在内存需求较高时运行非必要作业,或者尽可能将作业分配到多个系统。
本文资源: /article/8535。
Brian K. Tanaka 自 1994 年以来一直担任 UNIX 系统管理员,曾就职于 SGI、Intuit 和 RealNetworks 等公司。他是 Martingale-Oak, LLC 的联合创始人。您可以通过 btanaka@martingale-oak.com 与他联系。