當 RAM 使用量激增時 Ubuntu 會死機

當 RAM 使用量激增時 Ubuntu 會死機

這個問題持續了一段時間,但是當我從 18.04 升級到 20.04 後,感覺它變得非常頻繁(而不是偶爾一次,而是幾乎每天都會發生)。

每當發生問題時 - 在我看來,就像 RAM 使用率變高時(我見過人們描述磁碟 I/O 的類似問題,但情況似乎並非如此) - 系統邊緣凍結。在第一分鐘,系統會急劇卡頓,我有一個短暫的機會移動現在緊張的滑鼠遊標,以快速關閉導致問題的瀏覽器標籤或應用程式。如果我不這樣做,此時系統幾乎永久凍結,頂部欄上的系統時鐘停止更新,無論發生什麼情況都不會解凍,我需要進行硬重置。

以前,當我打開太多選項卡時,這種情況在 Firefox 上經常發生,但我安裝了選項卡限制器擴充功能來緩解這種情況。但這種情況一直在發生,當我在GIMP 中處理更大的圖像時,以及當我瀏覽一些無限滾動的網站(例如DeviantArt 重新設計或一些視頻網站)時,這種情況就會發生(有時) 。我剛剛在 GIMP 中製作的像素藝術作品損失了半小時的進度。

這使得我的系統使用起來非常煩人。我不想這麼說,但我的雙啟動 Windows 10 更穩定 - 這說明了一些問題,因為 W10 是我用過的最糟糕的作業系統。

這是一個 inxi -F 轉儲:

System:
  Host: shino-ProLiant-ML310-G5p Kernel: 5.4.0-66-generic x86_64 bits: 64 
  Desktop: Gnome 3.36.4 Distro: Ubuntu 20.04.2 LTS (Focal Fossa) 
Machine:
  Type: Desktop System: HP product: ProLiant ML310 G5p v: N/A 
  serial: <superuser/root required> 
  Mobo: N/A model: N/A serial: N/A BIOS: HP v: W08 date: 10/25/2010 
CPU:
  Topology: Dual Core model: Intel Xeon E3120 bits: 64 type: MCP 
  L2 cache: 6144 KiB 
  Speed: 1995 MHz min/max: N/A Core speeds (MHz): 1: 1995 2: 1995 
Graphics:
  Device-1: AMD ES1000 driver: N/A 
  Device-2: NVIDIA G86 [Quadro NVS 290] driver: nvidia v: 340.108 
  Display: x11 server: X.Org 1.20.9 driver: nvidia 
  unloaded: fbdev,modesetting,nouveau,vesa resolution: 1440x900~75Hz 
  OpenGL: renderer: Quadro NVS 290/PCIe/SSE2 v: 3.3.0 NVIDIA 340.108 
Audio:
  Device-1: Generalplus type: USB driver: hid-generic,snd-usb-audio,usbhid 
  Sound Server: ALSA v: k5.4.0-66-generic 
Network:
  Device-1: Broadcom and subsidiaries NetXtreme BCM5715 Gigabit Ethernet 
  driver: tg3 
  IF: enp3s4f0 state: down mac: 9c:8e:99:35:15:80 
  Device-2: Broadcom and subsidiaries NetXtreme BCM5715 Gigabit Ethernet 
  driver: tg3 
  IF: enp3s4f1 state: up speed: 1000 Mbps duplex: full 
  mac: 9c:8e:99:35:15:81 
Drives:
  Local Storage: total: 1.82 TiB used: 594.46 GiB (31.9%) 
  ID-1: /dev/sda model: LOGICAL VOLUME size: 1.82 TiB 
RAID:
  Hardware-1: Hewlett-Packard Smart Array G6 controllers driver: hpsa 
Partition:
  ID-1: / size: 910.88 GiB used: 594.46 GiB (65.3%) fs: ext4 dev: /dev/sda5 
Sensors:
  System Temperatures: cpu: 40.0 C mobo: N/A gpu: nvidia temp: 68 C 
  Fan Speeds (RPM): N/A 
Info:
  Processes: 288 Uptime: 2h 17m Memory: 3.84 GiB used: 2.86 GiB (74.6%) 
  Shell: bash inxi: 3.0.38 

答案1

https://en.wikipedia.org/wiki/Memory_paging#Swappiness它指出:

Swappiness 是一個 Linux 核心參數,用於控制在空閒記憶體無法滿足記憶體分配請求時交換運行時記憶體的相對權重,而不是從系統頁面快取中刪除頁面。 Swappiness 可以設定為 0 到 200(含)之間的值。較低的值會導致核心傾向於從頁面快取中逐出頁面,而較高的值會導致核心傾向於換出「冷」記憶體頁面。預設值為60;如果需要將冷頁面換回(例如,與空閒的程式互動時),將其設定得較高可能會導致高延遲,而將其設定得較低(甚至0)可能會在檔案已從記憶體中逐出時導致高延遲。交換也會進一步減慢 HDD 的速度,因為它涉及大量隨機寫入,而 SSD 則不存在此問題。當然,預設值在大多數工作負載中運作良好,但任何預期任務的桌面和互動式系統可能希望降低設置,而批次和互動較少的系統可能希望增加該設置。

由於 Ubuntu 預設值為vm.swappiness60我建議使用較低的值,即10,以便 RAM 中的非活動頁面對交換的攻擊性較小。

運行以下命令設定值10(如果 .conf 檔案中尚未設定任何值):

echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf

如果該設定已存在,您可以複製並貼上以下內容以將值變更為10

sudo sed -i "s/$(awk '/vm.swappiness/ {print $0}' /etc/sysctl.conf)/vm.swappiness\ =\ 10/" /etc/sysctl.conf

然後啟動更改:

sudo sysctl -p

您也可以嘗試不同的值,看看什麼最適合您。

希望這可以幫助!

相關內容