交換利用率在沒有高交換率的情況下激增

交換利用率在沒有高交換率的情況下激增

每個星期六,由於我不知道的原因,我的一台伺服器的交換利用率會激增。這不一定是問題,因為有足夠的可用內存,但我仍然想了解發生了什麼。

特別是,我對交換在大約 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 在該時間附近執行此腳本。

相關內容