
每個星期六,由於我不知道的原因,我的一台伺服器的交換利用率會激增。這不一定是問題,因為有足夠的可用內存,但我仍然想了解發生了什麼。
特別是,我對交換在大約 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 在該時間附近執行此腳本。