当我尝试暂停 Ubuntu 20.04 时,它经常会失败并显示错误消息:
Freezing of tasks failed after 20.005 seconds (1 task refusing to freeze, wq_busy=1)
我尝试了很多方法去寻找更多相关信息,但就是找不到问题的根源。这始终是我们两个任务之一。
我尝试使用命令
sudo PM_DEBUG=true pm-suspend
但是它的输出太长而且令人困惑,我无法从中读出任何信息。输出可以在该 pastebin 中找到。即使我将其缩短为正确的时间戳,它仍然包含太多信息: https://pastebin.com/Sx8WMHie
syslog 的输出如下: https://pastebin.com/KdJ8G1QP
有谁能帮我找到问题所在,或者告诉我我到底在找什么?这种情况已经持续了几个月,我却一无所知。它出现时完全是随机的,但我认为它占所有暂停的 20%
答案1
在进入挂起(或休眠)状态之前,用户空间进程和(某些)内核线程会被冻结。如果冻结失败,则可能是由于用户空间进程或内核线程冻结失败。
为了冻结用户空间进程,内核会向其发送一个自动处理的信号,一旦收到,不能忽略。但是,如果进程处于不可中断的睡眠状态(例如,等待由于设备不可用而无法完成的 I/O),它将不会立即收到信号。如果此延迟持续时间超过 20 秒(=默认冻结超时,请参阅/sys/power/pm_freeze_timeout
(以毫秒为单位)),冻结将失败。
如果内核线程拒绝冻结,那么很有可能是设备驱动程序有故障,但如果不看日志就很难判断。
从历史上看,NFS、CIFS 和 FUSE 等都曾导致过此类问题。
回到您的具体案例,您dmesg
应该有一些关于哪些任务冻结失败的详细信息,然后您就可以从那里开始。您的 pastebins 现已过期,但盲目猜测是 CIFS/SMB - 您是否使用其中任何一个来访问 Windows 共享?
这里解释了内核中任务的冻结,希望有所帮助:https://www.kernel.org/doc/html/latest/power/freezing-of-tasks.html