是的,我知道这个问题有 到过 问 十 如果 不是 数百 的 次 前。尽管如此,我还是浏览了所有类似的问题,并尝试了其中列出的所有内容,但无济于事。
在运行 Ubuntu 21.04 ( ) 的 Raspberry Pi 4 model B 上编译一些代码后Linux rpi4 5.11.0-1017-raspi #18-Ubuntu SMP PREEMPT Mon Aug 23 07:34:31 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
,ccache 卡住了,并且它已经以 100% CPU 运行了近一个小时。这是ps -l
有问题的进程的输出:
$ ps -l -p 7580
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 R 1000 7580 1 99 80 0 - 1725 - pts/2 00:54:10 ccache
我尝试着kill
去做kill -9
。没有效果。它看起来不像是僵尸,而是僵尸。它正在运行:
$ sudo cat /proc/7580/syscall
running
strace
我尝试用和附加到它gdb
,但两者都挂起。
我尝试找到父进程(如 所示ps auxf
)并杀死所有父进程,然后尝试再次杀死有问题的进程。它不起作用。
我边跑边demsg
看/var/log/syslog
,回头看,直到我开始这个过程。我没有找到任何线索来帮助我调试它。
通常我会重新启动并继续生活,但这是一天中的第三次重新启动(两次是由于 ccache,另一次是由于cpuUsage.sh
VS Code 远程安装的调用的 shell 脚本),我怀疑这将成为常态今后。我已经使用这块板几个月了,直到今天才发生这种情况。
我唯一合理但未经证实的假设是,主板启动的 SD 卡可能是坏的,但我不知道如何诊断这一点。
虽然我很想知道一个神奇的命令可以杀死这个进程,但考虑到我到目前为止所尝试的一切,我相当确定不存在这样的事情。我的问题是:假设这种情况继续发生,我该如何诊断?每天多次重新启动该板显然是不可持续的,我怀疑从现在开始我可能必须这样做。
编辑:根据评论的建议,我在查看dmesg
输出时尝试了以下操作:
$ sudo dd if=/dev/mmcblk0p2 of=/dev/null bs=1M
60648+1 records in
60648+1 records out
63595068928 bytes (64 GB, 59 GiB) copied, 1386,27 s, 45,9 MB/s
在输出中看到这个dmesg
:
[27430.135999] INFO: task kworker/3:2:12138 blocked for more than 120 seconds.
[27430.136031] Tainted: G C OE 5.11.0-1017-raspi #18-Ubuntu
[27430.136041] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[27430.136050] task:kworker/3:2 state:D stack: 0 pid:12138 ppid: 2 flags:0x00000008
[27430.136067] Workqueue: events_freezable mmc_rescan
[27430.136088] Call trace:
[27430.136092] __switch_to+0xb8/0xe4
[27430.136102] __schedule+0x2bc/0x7dc
[27430.136110] schedule+0x7c/0x110
[27430.136117] __mmc_claim_host+0xc0/0x1f0
[27430.136124] mmc_get_card+0x40/0x50
[27430.136130] mmc_sd_detect+0x2c/0xa0
[27430.136136] mmc_rescan+0xc8/0x314
[27430.136143] process_one_work+0x200/0x4f0
[27430.136151] worker_thread+0x74/0x3c0
[27430.136158] kthread+0x12c/0x140
[27430.136164] ret_from_fork+0x10/0x3c
鉴于堆栈跟踪中存在与 SD 卡相关的函数,这似乎证实了我对 SD 卡损坏的怀疑。