CentOS 伺服器上具有大量備用 RAM 的高交換使用率
我們擁有一組網路託管伺服器,它們都執行完全相同的軟體和硬體,具有相似的負載。
我們的一台伺服器負載非常高,導致它在短時間內鎖定。這個伺服器的主要區別似乎是非常高的交換使用率,即使有大量的可用 RAM 和交換設置為 30:
# cat /proc/sys/vm/swappiness 30 # free -m total used free shared buff/cache available Mem: 40074 8277 6352 548 25444 29412 Swap: 24575 5814 18761
Top 顯示了類似的記憶體使用情況和空閒負載的概念:
# top Tasks: 529 total, 6 running, 520 sleeping, 0 stopped, 3 zombie %Cpu(s): 51.1 us, 11.8 sy, 0.0 ni, 35.2 id, 1.6 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 41035828 total, 6511476 free, 8697564 used, 25826788 buff/cache KiB Swap: 25165820 total, 19224744 free, 5941076 used. 29916408 avail Mem
我認為可能存在問題的原因是 vmstat 顯示高交換使用率
# vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 10 0 5856556 4559436 724880 26904888 3072 20 26392 1624 30378 10346 30 22 40 4 5 12 1 5856444 4646072 725168 26902376 5344 80 19344 5548 25937 8049 18 30 45 4 4 17 0 5856608 4668964 717648 26875160 4772 164 17316 3300 31929 7187 19 53 19 5 5 10 1 5856780 4752916 704900 26836828 3768 172 17748 904 30300 7699 22 59 15 2 1 2 3 5856788 4623292 708248 26859896 4768 8 34496 1972 30090 15300 25 19 51 4 1 11 0 5856792 4726972 709364 26876620 6732 4 39812 3796 26562 12241 20 27 50 3 0 12 1 5856832 4749100 710604 26842904 9000 40 19136 1128 26507 9283 25 41 32 2 0 4 0 5856504 4859128 712020 26826680 7516 172 23524 2580 24394 10530 19 37 41 3 0 11 1 5856372 4791056 709808 26828772 11136 8 23860 2264 19609 12320 13 22 61 4 0 7 0 5856372 4634432 713320 26852572 8744 0 37992 1028 23425 12326 18 21 56 4 0 8 1 5856368 4530268 715848 26854832 5592 0 26272 2996 34327 14391 24 23 49 3 1 7 0 5856376 4611928 714176 26902960 7044 8 45588 2984 32832 10172 26 25 45 3 0 11 0 5856408 4645736 712716 26914004 8164 32 19692 7160 23702 16326 21 21 54 2 1 8 0 5856412 4658252 715648 26907004 6608 8 28260 1608 31679 10715 23 19 54 3 1 7 0 5855264 4495904 718876 26929968 6288 0 31232 968 23048 9080 24 11 59 5 0 4 0 5853560 4796052 719268 26938096 2148 0 18764 1556 21659 8297 15 14 69 2 0 4 2 5852116 4692844 720656 26952300 2212 0 16764 636 18181 10162 18 9 71 2 0 9 0 5850960 4566112 720756 26977948 3120 0 33116 5136 24373 7915 23 12 64 1 0 9 0 5850316 4626320 721260 26962468 2400 148 13988 484 24208 6748 21 34 43 1 0
我們有另一台伺服器,就負載和使用者數量而言,它們可能最接近它,它們都具有相同的硬體和軟體,而另一台伺服器甚至有更多的使用者,而且 CPU 使用率通常更高,儘管只是勉強。它始終使用更少的交換,它是免費的 -m 和 vmstat 看起來像:
other# free -m total used free shared buff/cache available Mem: 40073 9471 4376 2408 26226 27210 Swap: 28671 3490 25181 other# vmstat 1 10 0 3564112 4904700 1227052 25172336 0 44 19672 896 23057 3955 23 16 61 0 0 3 0 3564148 4837896 1226772 25168380 0 36 3080 15000 29370 4467 19 15 65 1 0 9 0 3564204 4829296 1226612 25222808 0 56 46632 2100 16596 5268 11 15 73 1 0 5 0 3564248 4663528 1226424 25328292 0 44 95104 1072 34862 6531 25 15 59 1 0 6 1 3564296 4566072 1226924 25390092 0 48 55632 2056 35307 12050 15 16 68 2 0 4 0 3564332 4496940 1226620 25391812 0 36 5772 1364 37957 4805 18 15 67 1 0 5 0 3564348 4651396 1226552 25388820 0 16 2160 2004 14545 3504 12 11 76 0 0 4 0 3564368 4809568 1225696 25331324 0 20 1524 700 11572 2997 7 10 83 0 0 3 0 3564404 4802060 1223488 25328372 0 44 2160 2328 21654 11113 14 14 72 0 0 3 0 3563960 4831720 1220844 25285840 296 16 1304 2120 16522 4083 11 11 77 0 0 5 0 3563972 4805272 1217784 25289068 0 12 6920 1060 22775 4271 17 12 71 0 0 3 0 3563980 4758120 1214556 25293184 0 8 5560 7896 30875 5421 22 13 63 0 1 4 0 3563988 4687848 1211544 25293100 28 8 3288 828 24343 4136 16 12 71 0 0 7 0 3564040 4474796 1204748 25299556 0 52 7908 1608 37724 6343 23 17 58 1 1 3 0 3564072 4507772 1201608 25324032 0 32 26724 2536 33578 7815 22 16 61 1 0 6 0 3564076 4709044 1198596 25327624 8 8 7016 928 29711 5099 19 13 67 1 0
在上面查看時,它顯示 systemd 每天使用大約 968GB 的磁碟讀取,而另一台伺服器每天使用大約 520GB 的磁碟讀取。我將此歸因於交換,但交換會顯示在該統計資訊下嗎?
我知道這台伺服器與其他伺服器相比表現不佳,而且鎖定似乎是相關的,雖然很難說,因為它何時鎖定我們無法進入,我們的日誌記錄也失敗了。
我希望找到一種方法來找出該伺服器為何如此頻繁地使用交換。
編輯:添加了來自 Atop 的圖像以顯示 Page Scan/stall & Swap in Swap out Atop 顯示頁面掃描
首先,你幾乎肯定不會在這裡交換——你是在分頁。分頁是一個不同的過程,它使用與交換相同的儲存空間,但它是主動的,而不是純粹對記憶體條件作出反應。
如果您看到更多的分頁,那將是因為您的工作量針對您的硬體集。每秒監控您的工作負載操作(或類似指標)將揭示那裡的任何不一致之處。根據負載平衡的工作方式,您可能有一個“粘性”客戶端,需要在此特定伺服器上進行高負載 - 但這只是猜測。
其次,如果這些伺服器都具有相同的硬體配置文件,您應該期望它們在相同負載下執行幾乎相同。如果您的負載確實是平衡的,那麼執行一些硬體診斷將是謹慎的。首先關注磁碟和網路 I/O,因為幾乎沒有故障的磁碟或 NIC 將推動平均負載和相關的記憶體使用量,因為硬體會佔用重試時間等。
儘管顯示了您的數據,但這確實非常廣泛,因此很難準確回答。發布工作負載和硬體診斷資訊的結果將有助於提供更具體的答案,如果不是自己回答問題的話。