我的台式机运行的是 Ubuntu 20.04。在过去的几个月里,我注意到了很多奇怪的行为(至少如此),我正在尝试找出如何排除故障。
该系统配备 32 GB 内存、AMD Ryzen 5900X CPU、MSI MAG B550 Tomahawk MD 和几个附加的 SSD。
症状如下:
- 浏览器标签页总是崩溃。每隔 15 分钟左右,我打开的一个标签页(通常有 20-30 个)就会崩溃(Chrome 中显示“Aw Snap!”,Firefox 和 Chromium 中显示类似消息)。
- Slack 会间歇性崩溃。每天大约有 1-2 次,它会挂起约一分钟,然后死机。
- 我的虚拟机会损坏。我通常一次打开 1-3 个虚拟机,大约每月一次,我的虚拟机会开始抱怨文件系统只读。我会重新启动,它会启动到 initramfs,然后在磁盘上运行 fsck 通常可以修复它。
我的直觉是内存可能出了问题,但我不知道如何排除故障。有没有日志可以帮我找出 Chrome 一直崩溃的原因?
提前致谢!
按照@heynnema 的要求进行编辑添加:
david@jawad:~$ ls -lah /var/crash/
total 240M
drwxrwsrwt 2 root whoopsie 4.0K Mar 22 10:43 .
drwxr-xr-x 15 root root 4.0K Aug 31 2021 ..
-rw-r----- 1 david whoopsie 35M Mar 22 01:13 _opt_google_chrome_chrome.1000.crash
-rw-r----- 1 david whoopsie 27M Mar 22 10:43 _usr_bin_python3.8.1000.crash
-rw-r----- 1 david whoopsie 60M Mar 15 15:51 _usr_lib_insync_PySide2_Qt_libexec_QtWebEngineProcess.1000.crash
-rw-r--r-- 1 david whoopsie 0 Mar 15 15:51 _usr_lib_insync_PySide2_Qt_libexec_QtWebEngineProcess.1000.upload
-rw------- 1 whoopsie whoopsie 37 Mar 15 15:51 _usr_lib_insync_PySide2_Qt_libexec_QtWebEngineProcess.1000.uploaded
-rw-r----- 1 david whoopsie 98M Mar 22 07:28 _usr_lib_slack_slack.1000.crash
-rw-r----- 1 david whoopsie 22M Mar 17 09:45 _usr_share_typora_Typora.1000.crash
也将获得 memtest。
根据要求进行下一步编辑:
# lshw -C memory
*-firmware
description: BIOS
vendor: American Megatrends International, LLC.
physical id: 0
version: A.60
date: 05/12/2021
size: 64KiB
capacity: 32MiB
capabilities: pci upgrade shadowing cdboot bootselect socketedrom edd int13floppynec int13floppytoshiba int13floppy360 int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer int10video acpi usb biosbootspecification uefi
*-memory
description: System Memory
physical id: 10
slot: System board or motherboard
size: 32GiB
*-bank:0
description: 2667 MHz (0.4 ns) [empty]
product: Unknown
vendor: Unknown
physical id: 0
serial: Unknown
slot: DIMM 0
clock: 2667MHz (0.4ns)
*-bank:1
description: DIMM DDR4 Synchronous Unbuffered (Unregistered) 2667 MHz (0.4 ns)
product: F4-3200C16-16GVK
vendor: Unknown
physical id: 1
serial: 00000000
slot: DIMM 1
size: 16GiB
width: 64 bits
clock: 2667MHz (0.4ns)
*-bank:2
description: 2667 MHz (0.4 ns) [empty]
product: Unknown
vendor: Unknown
physical id: 2
serial: Unknown
slot: DIMM 0
clock: 2667MHz (0.4ns)
*-bank:3
description: DIMM DDR4 Synchronous Unbuffered (Unregistered) 2667 MHz (0.4 ns)
product: F4-3200C16-16GVK
vendor: Unknown
physical id: 3
serial: 00000000
slot: DIMM 1
size: 16GiB
width: 64 bits
clock: 2667MHz (0.4ns)
*-cache:0
description: L1 cache
physical id: 13
slot: L1 - Cache
size: 768KiB
capacity: 768KiB
clock: 1GHz (1.0ns)
capabilities: pipeline-burst internal write-back unified
configuration: level=1
*-cache:1
description: L2 cache
physical id: 14
slot: L2 - Cache
size: 6MiB
capacity: 6MiB
clock: 1GHz (1.0ns)
capabilities: pipeline-burst internal write-back unified
configuration: level=2
*-cache:2
description: L3 cache
physical id: 15
slot: L3 - Cache
size: 64MiB
capacity: 64MiB
clock: 1GHz (1.0ns)
capabilities: pipeline-burst internal write-back unified
configuration: level=3
答案1
/var/crash 中有很多崩溃日志。
Ryzen 处理器对 RAM 的要求非常严格。转到https://memtest86.com并免费下载/运行它们memtest
来测试你的记忆力。至少完成一次所有 4/4 测试以确认记忆力良好。这可能需要几个小时才能完成。
更新#1:
memtest
失败。请告诉我sudo lshw -C memory
。
更新 #2:
您有两条 16G DIMM 内存。首先,关闭计算机,然后移除并重新插入每条 DIMM,并重新运行memtest
。如果通过,那么您可能已经解决了问题。
如果失败,请移除一个 16G DIMM 并重新运行memtest
。如果失败,则该 DIMM可能有缺陷。
无论哪种情况,请移除该 DIMM 并重新插入另一个 DIMM 并重新运行memtest
。
记录下哪个 DIMM 通过了,哪个 DIMM 发生故障很重要。报告结果。
更新 #3:
memtest
个别 DIMM 出现故障。怀疑是 RAM 兼容性问题,但首先我们需要更新 BIOS 并重新测试memtest
。获取 BIOS 更新这里。
笔记:确认我拥有您主板(MSI MAG B550 Tomahawk MD)的正确网页。
笔记:更新 BIOS 之前请做好备份。
更新 #4:
您的内存 DIMM(F4-3200C16-16GVK)未出现在显示的内存兼容性列表中这里。
更新 #5:
查看用户手册的第 13 页和第 15 页这里并确认 DIMM 插槽 A2 首先被填充,然后是 B2,并且使用完全相同规格的 DIMM。
更新 #6:
看https://www.crucial.com/了解正确规格的 DIMM。请参阅https://www.crucial.com/compatible-upgrade-for/msi-%28micro-star%29/mag-b550-tomahawk
更新 #7:
确认 CPU 和 RAM 没有超频。如果超频,请将其恢复为默认时钟,然后使用 重新测试memtest
。
更新 #8:
更换了 RAM。现在一切正常。
答案2
我遇到了同样的问题,我尝试了这个并且它对我有用:
Ubuntu 22.04 LTS 引入了 systemd-oomd,这是一个用户空间内存不足杀手,旨在“在内核空间发生 OOM 之前采取纠正措施”。当它检测到内存压力有点太大时,它会进行干预以确保系统能够应对,并且(大多数)事情都能继续运行。希望它能帮到你。
大多数systemd
服务都可以通过systemctl
实用程序进行管理。在本例中,我们想要禁用该systemd-oomd
服务。可以使用以下命令完成此操作:
$ systemctl disable --now systemd-oomd
您应该会看到类似的内容(取决于您的操作系统):
$ systemctl disable --now systemd-oomd
Removed /etc/systemd/system/multi-user.target.wants/systemd-oomd.service.
Removed /etc/systemd/system/dbus-org.freedesktop.oom1.service.
然后,您可以使用以下命令验证该服务是否已被禁用:
$ systemctl is-enabled systemd-oomd
然后你应该看到:
$ systemctl is-enabled systemd-oomd
disabled
但是,其他服务可能会尝试重新启动该systemd-oomd
服务。为了防止这种情况,您可以“屏蔽”该服务。例如:
$ systemctl mask systemd-oomd
Created symlink /etc/systemd/system/systemd-oomd.service → /dev/null.
然后systemctl is-enabled
现在应该报告:
$ systemctl is-enabled systemd-oomd
masked
请man systemctl
参阅更多详细信息;特别要注意有关systemd
服务屏蔽的注意事项。