Linux

Linux 交換空間使用未釋放

  • April 10, 2020

我在我的一個系統 (RHEL6) 上收到警報,說它的交換空間使用率很高。

查看虛擬機後,我確實可以看到交換已被充分利用,而我們有足夠多的可用物理記憶體,例如:

[root@xxxxxxxxxx ~]# free -h
            total       used       free     shared    buffers     cached
Mem:           11G       5.3G       6.3G       2.6M       196M       560M
-/+ buffers/cache:       4.6G       7.0G
Swap:         4.0G       4.0G        21M

所以我的問題是:

這是否意味著系統在某個時候耗盡了物理記憶體,並且“不得不”使用這些 4Gbs 的額外 SWAP。之後記憶體被釋放,但交換仍然很高。

如果是這樣的話,有沒有辦法“清空”那個交換?

在機器上執行頂部時,通過交換使用過濾,我可以看到一些使用該 SWAP 的程序(頂部的 java 尤其是2.7g)

top - 14:57:06 up 72 days, 19:54,  4 users,  load average: 0.06, 0.02, 0.00
Tasks: 201 total,   1 running, 200 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.2%us,  0.9%sy,  0.0%ni, 97.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  12197860k total,  5598708k used,  6599152k free,   201704k buffers
Swap:  4193276k total,  4170820k used,    22456k free,   573636k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
  9180 pcmc03    20   0 7428m 980m 9208 S  0.3  8.2 797:35.54 2.7g java
  9474 pcmc03    20   0 3409m 999m 9.8m S  0.0  8.4 492:09.57 513m pmrepagent
  9455 pcmc03    20   0 2702m 1.5g 3712 S  0.0 13.0  29:42.06 297m pmrepagent
  9383 pcmc03    20   0 4362m 229m 1568 S  0.3  1.9 159:45.77 213m java
  9494 pcmc03    20   0 2705m 108m  10m S  0.3  0.9 183:49.58  61m pmserver
  7371 root      20   0  231m  69m 2104 S  0.0  0.6 360:27.50  60m prismd.pl
  1730 root      20   0  117m  44m  920 S  0.0  0.4  33:45.09  46m rootmon

這是否意味著這個 java 程序必須在某個時候使用 2.7g 的交換並保留保留?如果是這樣,我想這個系統可能需要額外的記憶體來避免將來出現類似情況?

vmstat不顯示任何 si/so 。

非常感謝您

是的,看來您的記憶體不足。不,不要嘗試將其從交換中釋放出來。如果你這樣做,它將進入 RAM。然而,可能值得看看哪些程序正在浪費記憶體,並詢問它們是否需要存在?

引用自:https://unix.stackexchange.com/questions/579179