当我在 Ubuntu 18.10 上使用太多 RAM 时,GUI 会冻结。它停止对键盘和鼠标做出反应,除了硬重置计算机之外别无他法。
我相信这是因为系统已将 Gnome 二进制文件交换到磁盘,并且最终它们会被交换回来。但这从未在观察到的时间范围内发生(20 分钟左右)。
我试图通过禁用交换来解决问题(我更喜欢丢失未保存的工作而不是丢失未保存的工作并不得不重新启动PC)并指示OOM杀手根据this answer杀死任何触发OOM情况的进程。然而,这并没有帮助。我试图通过打开太多浏览器选项卡来使用大量内存,唯一发生的事情是系统再次变得无响应。
这怎么可能?除了抖动还有什么其他机制可以参与?(真正的工程问题,不是咆哮)
我在这个实验期间监控了系统统计数据,似乎 CPU 没有在 100% 负载下运行,所以这不是计算限制。此外,在我有机会打开足够多的选项卡来触发 OOM 杀手之前,GUI 似乎冻结了。
我能想出的最好的理论是,GUI 库正在使用某种内存分配器,通过使用一些替代交换机制或通过一些 CPU 密集型堆重新排列,即使内存非常少,它们也可以继续运行。否则我没有头绪。
这种行为有更好的解释吗?甚至是解决方案?
编辑
我的交换:
vm.swappiness = 60
我的记忆:
martin@martin-UX305UA:~$ free -h
total used free shared buff/cache available
Mem: 7.7G 5.5G 145M 993M 2.1G 975M
Swap: 2.0G 57M 1.9G
我的/etc/fstab
UUID=e0edf45b-903c-403f-b2c7-5e69b8b450da / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=0564-1C88 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
值得尝试使用 OOM-killer 的一些改进版本。像earlyoom或nohang。他们的网站上描述了更多替代方案。
这些用户空间应用程序的反应速度比常规内核 OOM-killer 快得多。
github 上的 nohang 维护者非常积极地响应问题,以防您遇到任何问题。
这个linux 播客提供了一些关于该主题的音频介绍。
注意:您确实需要添加更多 RAM,但我们会试试这个...
每个系统都需要一个交换分区或 /swapfile。
删除 OOM 调整
将当前未使用的 2G /swapfile 更改为至少4G
调整 vm.swappiness
/交换文件
注意:命令使用不当
dd
会导致数据丢失。建议复制/粘贴。确保此行位于 /etc/fstab ...
vm.swappiness
在中
terminal
,尝试...sudo sysctl vm.swappiness
# 查看原始值 (=60)sudo sysctl vm.swappiness=80
# 更改 RAM 与交换比率使永久...
设置vm.swappiness=80(基于8G RAM和4G SWAP),这样...
sudo -H gedit /etc/sysctl.conf
# 编辑这个文件搜索现有
vm.swappiness=
条目...CTRL+ fvm.swappiness
如果找到,编辑它说
vm.swappiness=80
如果没有找到,在文件末尾添加
vm.swappiness=80
保存您的编辑并退出 gedit
sudo sysctl -p