Linux系统的ECS实例运行卡顿,在/var/log/messages日志中出现“INFO:task jbd2/vda1-8:366 blocked for more than 120 seconds”错误怎么办?

本文介绍Linux系统的ECS实例运行卡顿,在/var/log/messages日志中出现类似“INFO:task jbd2/vda1-8:366 blocked for more than 120 seconds”错误的问题原因和解决方案。

问题现象

Linux系统的ECS实例出现运行卡顿、系统响应变慢、某些进程无法正常运行、系统负载较高等现象,在/var/log/messages日志中出现大量类似如下错误信息。

[8291809.483930] INFO:task jbd2/vda1-8:366 blocked for more than 120 seconds.

问题原因

在Linux系统的ECS实例中,当某个进程因为某种原因无法继续执行,并且长时间停滞在某个状态下无法响应,就会发生挂起任务(hung task)故障,出现hung task故障可能原因如下:

  • 进程卡住(blocked):当某个进程在执行过程中出现死锁、内存泄漏或者其他异常问题时,该进程可能会卡住,无法继续执行,出现hung task故障。

  • 系统内核问题:当系统内核存在漏洞或者其他问题时,可能会出现hung task故障。

  • 系统资源紧张:ECS实例中应用或进程占用系统资源使用率(如CPU、内存等)过高时,可能会出现hung task故障。

解决方案

出现hung task的原因比较复杂,您可以参考以下步骤进行排查。

  1. 重启实例。

    系统无法正常运行时,您可以尝试重启实例,以恢复实例到正常状态。具体操作,请参见重启实例

  2. 终止卡住的进程。

    使用kill命令终止卡住的进程,以释放系统资源。

  3. 调整系统参数。

    通过调整系统参数(如内核参数),来提高系统的稳定性和性能。

  4. 升级内核版本。

    如果系统内核存在漏洞或者其他问题,可以尝试升级内核版本解决问题。

  5. 升配实例规格。

    当因实例规格较低导致负载高及资源不足问题时,您可以升配实例规格来解决。更多详情,请参见Linux实例负载高问题排查和异常处理升降配方式概述