每个星期六,由于我不知道的原因,我的一台服务器的交换利用率会出现激增。这不一定是问题,因为有足够的可用内存,但我仍然想了解发生了什么。
特别是,我对交换在大约 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 在该时间附近运行此脚本。