文档首页/ 云容器引擎 CCE/ 常见问题/ 节点/ 操作系统问题说明/ EulerOS 2.9内核缺陷导致虚拟机卡住
更新时间:2024-09-04 GMT+08:00

EulerOS 2.9内核缺陷导致虚拟机卡住

故障现象

EulerOS 2.9节点上,由于内核存在调度相关的社区问题,有低概率会触发死锁,表现为虚拟机卡住。

影响范围

  • x86内核版本:4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64
  • arm内核版本:4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64

问题根因

EulerOS 4.18版本内核存在调度相关问题,使用CPU cgroup场景下,设置cfs bandwidth,并触发CPU带宽管控,会概率性触发warn级别告警打印,该流程会持有调度的rq锁,跟其他进程发生死锁(x86_64下为ABBA锁,aarch64下为AA锁)。

解决方法

您可以修改配置文件中的kernel.printk参数值进行修复。kernel.printk参数用于控制内核日志信息的输出级别和方式。

  1. 检查配置文件中kernel.printk参数的当前配置。

    grep "kernel.printk" /etc/sysctl.conf

    回显中kernel.printk参数值为“7 4 1 7”,如下:

  2. 删除kernel.printk配置。

    sed -i '/^kernel.printk/d' /etc/sysctl.conf

  3. 确认配置文件是否修改成功,执行以下命令无回显。

    grep "kernel.printk" /etc/sysctl.conf

  4. 重新配置kernel.printk参数。

    x86_64版本:
    1. 执行以下命令:
      sysctl -w kernel.printk="4 4 1 7"

    2. 检查修改是否成功,执行以下命令:
      sysctl -a | grep kernel.printk

      确认kernel.printk参数为“4 4 1 7”。

    arm版本:
    1. 执行以下命令:
      sysctl -w kernel.printk="1 4 1 7"

    2. 检查修改是否成功,执行以下命令:
      sysctl -a | grep kernel.printk

      确认kernel.printk参数为“1 4 1 7”。