当 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(含)之间的值。[18] 较低的值会导致内核倾向于从页面缓存中逐出页面,而较高的值会导致内核倾向于换出“冷”内存页面。默认值为 60;如果需要将冷页面换回(例如,与空闲的程序交互时),则将其设置得更高可能会导致高延迟,而将其设置得更低(甚至 0)可能会导致高延迟,因为需要再次读取已从缓存中逐出的文件,但程序会更灵敏。交换还会进一步降低 HDD 的速度,因为它涉及大量随机写入,而 SSD 没有这个问题。当然,默认值在大多数工作负载下都能很好地运行,但对于任何预期任务,桌面和交互系统可能需要降低设置,而批处理和交互性较差的系统可能需要增加设置。[19]

由于 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

您还可以尝试不同的值来查看哪个最适合您。

希望这可以帮助!

相关内容