这个错误信息表明系统中有一个任务被阻塞超过120秒,通常与I/O、内存或调度问题有关。以下是三种解决方式:
# 临时调整(立即生效,重启后失效)
echo 600 > /proc/sys/kernel/hung_task_timeout_secs
# 永久调整(添加到/etc/sysctl.conf)
echo "kernel.hung_task_timeout_secs = 600" >> /etc/sysctl.conf
sysctl -p
这将把hung task检测时间从默认的120秒延长到600秒,减少误报。
# 查看当前I/O等待情况
iostat -x 1 5
# 检查磁盘健康状态
smartctl -a /dev/sdX
# 如果有高I/O等待,可以尝试:
# - 优化文件系统(如ext4添加noatime,nodiratime选项)
# - 升级存储硬件
# - 调整I/O调度器(如deadline或noop)
echo deadline > /sys/block/sdX/queue/scheduler
# 检查内存使用情况
free -h
# 检查OOM killer日志
dmesg | grep -i oom
# 解决方案可能包括:
# - 增加物理内存
# - 调整swap空间大小
# - 优化应用程序内存使用
# - 调整vm.swappiness参数
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
如果以上方法不能解决问题,可能需要进一步检查:
- 特定进程的堆栈跟踪(cat /proc/<PID>/stack
)
- 内核日志中的其他相关错误(dmesg
)
- 考虑升级内核版本或应用相关补丁