kernel: INFO: task {PROCESS}:{PID} blocked for more than 120 seconds

总结

这些消息通常意味着系统正在经历磁盘或者内存拥塞,并且进程缺乏可用资源。
这些消息用作警告,某些内容可能未以最佳方式运行。
它们不一定表示存在严重问题,当系统恢复时,任何被阻止的进程最终都应该继续进行。
如果可能,我们可以尝试在问题期间捕获以下命令的输出:

# top -n 5 -b > /tmp/top.out
# vmstat 1 50 > /tmp/vm.out
# iostat -x 2 10 > /tmp/io.out
# ps aux > /tmp/ps.out
# ps auxH > /tmp/psh.out
# sar -A > /tmp/sar.out
# free > /tmp/free.out
# lsof > /tmp/lsof.out

这些输出在诊断系统挂起问题或者“任务阻塞超过 120 秒”信息消息背后的原因时非常有用。

问题

有时 INFO 消息会记录到 /var/log/messages 中,例如:

Apr 19 03:33:22 host kernel: INFO: task kjournald:2046 blocked for more than 120 seconds.
Apr 19 03:33:22 host kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Apr 19 03:33:22 host kernel: kjournald     D ffff810001004420     0  2046     49          2476  2044 (L-TLB)
Apr 19 03:33:22 host kernel:  ffff81013ce9fdd0 0000000000000046 0000000000000100 0000000000000000
Apr 19 03:33:22 host kernel:  0000000000000000 000000000000000a ffff81013c7d0820 ffffffff80309b60
Apr 19 03:33:22 host kernel:  001b51e0f255644a 0000000000000a88 ffff81013c7d0a08 0000000000000000
Apr 19 03:33:22 host kernel: Call Trace:
Apr 19 03:33:22 host kernel:  [] :jbd:journal_commit_transaction+0x16d/0x1066
Apr 19 03:33:22 host kernel:  [] autoremove_wake_function+0x0/0x2e
Apr 19 03:33:22 host kernel:  [] try_to_del_timer_sync+0x7f/0x88
Apr 19 03:33:22 host kernel:  [] :jbd:kjournald+0xc1/0x213
Apr 19 03:33:22 host kernel:  [] autoremove_wake_function+0x0/0x2e
Apr 19 03:33:22 host kernel:  [] keventd_create_kthread+0x0/0xc4
Apr 19 03:33:23 host kernel:  [] :jbd:kjournald+0x0/0x213
Apr 19 03:33:24 host kernel:  [] keventd_create_kthread+0x0/0xc4
Apr 19 03:33:24 host kernel:  [] kthread+0xfe/0x132
Apr 19 03:33:24 host kernel:  [] child_rip+0xa/0x11
Apr 19 03:33:24 host kernel:  [] keventd_create_kthread+0x0/0xc4
Apr 19 03:33:24 host kernel:  [] kthread+0x0/0x132
Apr 19 03:33:24 host kernel:  [] child_rip+0x0/0x11

这些信息是什么?
它们的影响是什么?

欢迎来到之路教程(on itroad-com)

解决方案

此消息旨在使进程处于“D”状态 120 秒。
在这个例子中,kjournald 等待 journal_commit_transaction() 完成超过 120 秒,很可能是由于某些进程的大量 I/O,因为日志提交是一个原子函数。

一般来说,如果消息没有如此频繁地记录在 /var/log/messages 中,这可以被忽略。
这只是由于某些原因导致进程卡住的信息,这可能是由于大量 I/O、存储/网络断开/延迟等原因造成的。

因此,我们在发现此消息后首先需要做的是检查是否经常记录此消息,然后是当时是否存在网络/存储问题。

日期:2020-09-17 00:14:01 来源:oir作者:oir