Ubuntu

Ubuntu 伺服器上的高交換使用率

  • August 15, 2022

這是該命令在Nginx反向代理後面free執行Spring Boot應用程序的伺服器上報告的內容:

$ free -h

              total        used        free      shared  buff/cache   available
Mem:           1.9Gi       893Mi       164Mi        29Mi       919Mi       883Mi
Swap:          511Mi       481Mi        30Mi

我應該如何解釋高交換使用率?這是否表明我應該將伺服器升級到更高的記憶體容量(例如 4 GiB)?

vmstat的輸出

$ vmstat 1 5

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0 493428 150620  95476 879668    0    1     8    28    1    0  3  1 95  0  1
0  0 493428 150620  95476 879708    0    0     0     4  970 1891  4  1 95  0  0
1  0 493428 150620  95476 879712    0    0     0     0  851 1708  6  6 86  0  3
2  0 493428 150620  95476 879712    0    0     0     0  704 1398  4  5 91  0  0
1  0 493428 150620  95476 879712    0    0     0    16  583 1206  3  3 94  0  0

vmstat您沒有的輸出siso活動中可以看出,即使是平均值(第一行)也可以忽略不計。嘗試使用,swappiness但如果您沒有看到嚴重的性能下降,則無需更改任何內容。

在我看來,這不應該被解釋為直接進行 RAM 升級的論據,因為關於 SWAP 有很多因素,其中一個是swappiness。

來自Ubuntu 常見問題解答

什麼是swappiness,我該如何改變它?

swappiness 參數控制核心將程序移出物理記憶體並移至交換磁碟的趨勢。由於磁碟比 RAM 慢得多,如果程序過於激進地移出記憶體,這可能會導致系統和應用程序的響應時間變慢。

  • swappiness 的值可以在 0 到 100 之間
  • swappiness=0 告訴核心盡可能長時間地避免將程序交換出物理記憶體
  • swappiness=100 告訴核心積極地將程序交換出物理記憶體並將它們移動到交換記憶體

Ubuntu 中的預設設置是 swappiness=60。降低 swappiness 的預設值可能會提高典型 Ubuntu 桌面安裝的整體性能。建議使用 swappiness=10 的值,但請隨意嘗試。注意:Ubuntu 伺服器安裝對桌面系統的性能要求不同,預設值 60 可能更合適。

檢查swappiness值

cat /proc/sys/vm/swappiness

要更改 swappiness 值,可以使用 swappiness 值 10 進行臨時更改(重新啟動時失去)

sudo sysctl vm.swappiness=10

要使更改永久生效,請使用您喜歡的編輯器編輯配置文件:

gksudo gedit /etc/sysctl.conf

搜尋 vm.swappiness 並根據需要更改其值。如果 vm.swappiness 不存在,請將其添加到文件末尾,如下所示:

vm.swappiness=10

保存文件並重新啟動或輸入以下內容:

sudo sysctl --load=/etc/sysctl.conf

這裡有一個解釋得更好的文章。

引用自:https://serverfault.com/questions/1108206