一年多来,我一直有关机问题。以下是需要满足的条件:
- 已启用交换
- 交换空间已使用:我有 8GB,当我开始使用 4~5GB 以上时,我开始在交换空间中看到一些东西。通常在我运行虚拟机或大型游戏时发生。
在这些情况下,当我关闭电脑时,我看到以下内容:
- 大多数关闭发生在
- 几分钟甚至十分钟以上什么都不做
- 最后关机
当然,此时我使用Alt+SysRq同步、挂载只读并强制关机。
禁用交换后,我不会遇到这个问题,但是我可能会耗尽内存(这会导致 Linux 挂起一分钟,然后 OOM 决定杀死某个进程,这是另一个问题)。
有人知道问题出在哪里吗?或者我该如何调试它?
我试过获取堆栈跟踪使用Alt+ SysRq,但在关机期间分辨率较低,并且有四个核心,大多数跟踪都在屏幕之外,所以我似乎无法弄清楚它在哪里停顿。
PS:我不确定我在 14.04 中是否受到了这个问题的影响,但我相当确定它在 systemd 之前和之后都发生过。
编辑:
我真傻,我可以往回滚动查看关机日志。如果我在关机卡住时打印堆栈跟踪,则有三个核心cupidle_enter_state()
或类似的东西,并且打印堆栈跟踪的线程有此跟踪:
编辑:
我考虑过swapoff
在关机前进行检查,这样问题可能就会消失。结果显示交换区以 8MB/s 的超慢速度关闭。这可能是关机速度如此缓慢的原因,也许是在执行swapoff
。swapoff
速度慢似乎影响了很多人。我将进行进一步调查,如果能够得出一些结论性结论,我会写一个答案。