交换利用率在没有高交换率的情况下激增

交换利用率在没有高交换率的情况下激增

每个星期六,由于我不知道的原因,我的一台服务器的交换利用率会出现激增。这不一定是问题,因为有足够的可用内存,但我仍然想了解发生了什么。

特别是,我对交换在大约 20 分钟内从 2% 使用到 100% 使用的情况感到困惑。但当这种情况发生时,掉期利率似乎没有任何增加。服务器有一个 8 GB 交换分区,因此我预计每秒数千页的页面输出速率才能填充可用空间。

此外,当时似乎没有出现任何导致服务器交换的内存利用率峰值。

任何人都可以对观察到的行为做出解释吗?服务器是 RHEL 4.8(我知道是旧的),内核为 2.6.9。我在下面包含了 sar 的一些输出。

交换利用率在大约 20 分钟内从 2% 跃升至 100%:

$ sar -r -f sa12
....
06:00:01 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
06:10:01 PM   4583856  11847032     72.10     79676    319804   8178056    207864      2.48     19816
06:20:01 PM   4720904  11709984     71.27     38840    225108   8178400    207520      2.47     19124
06:30:02 PM   4839160  11591728     70.55      1404    144948   1968152   6417768     76.53   6227068
06:40:02 PM   4827016  11603872     70.62      1640    145484     10232   8375688     99.88   8182968
06:50:02 PM   4836376  11594512     70.57       844    123304        60   8385860    100.00   8193044
07:00:01 PM   4825764  11605124     70.63       920    128108      4516   8381404     99.95   8188680
....

以下是同期的交换统计数据。

$ sar -W -f sa12
....
06:00:01 PM  pswpin/s pswpout/s
06:10:01 PM      0.00      0.00
06:20:01 PM      0.00      0.00
06:30:02 PM      0.68      0.00
06:40:02 PM      1.85      0.00
06:50:02 PM      5.07      0.00
07:00:01 PM      8.62      0.00
....

答案1

有趣的事实:交换使用量从 0 增加到 8GB...同时,没有一个字节写入磁盘(sarpswpout/s显示 0)。所以我的假设是交换已分配/保留,但未消耗/使用。

我最好的猜测是您的服务器使用vm.overcommit_memory=2(阅读vm.overcommit_memory 文档,vm 过量使用会计)。在这种情况下,分配的每个字节都被视为已使用。 [我没有检查]。

您可能还想阅读该主题Linux:已使用的总交换空间 = 进程使用的交换空间 + ??

答案2

这并不能直接回答您的问题,但以下脚本可能对您的调查有用。它可以让您知道每个进程正在使用多少交换空间:

找出哪些进程正在使用交换

如果您大致了解交换何时开始,则可以设置 cron 在该时间附近运行此脚本。

相关内容