![如何调试缓慢休眠](https://linux22.com/image/1070712/%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%E7%BC%93%E6%85%A2%E4%BC%91%E7%9C%A0.png)
我有几台运行最新版 Ubuntu 20.04 的 PC/笔记本,目前 Ubuntu 存储库默认提供 64 位内核 5.4.0-74-generic。其中一台是相当普通的 PC,配备 Intel i3 CPU,自从我从 18.04 升级到 20.04 后,休眠时间略长于 2 分钟。
我发现的有关调试休眠的各种资源大多涉及唤醒或完全挂起失败,但不包括需要很长时间的挂起到磁盘的情况。唤醒工作正常,只需几秒钟。我如何才能找出休眠需要这么长时间的原因?有没有类似systemd-analyze blame
休眠的方法?
到目前为止,我添加了initcall_debug no_console_suspend
in GRUB_CMDLINE_LINUX_DEFAULT
,/etc/default/grub
它确实显示了控制台,但是,没有显示任何内容来解释长时间。它显示网络接口的“检测到硬件单元挂起”。但这出现在休眠开始时,我猜这是预期的行为。
我用systemctl hibernate
它来启动它。即使在控制台上以 root 身份运行且没有其他登录用户或用户进程,也需要 2 分钟才能关机。
答案1
我的建议:
决定要提问 @ askubuntu.com并认真对待
;)
收集数据,用最少的设置重现问题,并具体化。确保有足够的交换空间。该命令
free
给出了 RAM(“Mem”)和交换空间的数量。交换空间的总量应大于总 RAM。我意识到我在某些时候添加了 RAM,但没有增加交换分区的大小。编辑(2021-06-07):大小差异约为 1GB。增加大小后,休眠速度不断加快,但我仍然认为这是由于保存交换分区的 SSD 写入速度发生变化而导致的。(另请参阅下一点。)冬眠应该多快?本质上,在挂起到磁盘期间,所有 RAM 都会写入磁盘。RAM 的数量和磁盘的写入速度决定了所需的时间。我查找了我的交换分区,并使用检查了将其清零需要多长时间
dd if=/dev/zero
。dd
报告的速度为 108 MB/s。写入 7 GB 需要约 65 秒。我的 PC 有 8 GB。因此,我应该预计休眠至少需要一分钟。尝试拆件调试系统:卸下不需要的硬件。全新启动后立即休眠,无论是否先登录。
添加
initcall_debug no_console_suspend
按照问题所述进入内核命令行。
目前,我猜测我经历缓慢休眠的原因是:我添加了 RAM(因此休眠需要更长时间),我忘记增加交换空间以匹配添加的 RAM(我有 7G 交换但 8G RAM),并且 SSD 的写入速度随着时间的推移而下降(至少降低了 2 倍)。
进一步推荐阅读:
- 调试 Linux* 挂起/休眠问题的最佳实践 | 01.org2015 年出版