阿里云首页 相关技术圈

Alibaba Cloud Linux 3系统的ECS实例中rq->nr_running在throttle场景下统计异常

问题描述

在符合如下条件的Alibaba Cloud Linux 3实例中,系统运行时出现rq->nr_running统计异常的问题。

  • 镜像:Alibaba Cloud Linux 3.2104 64位
  • 内核:5.10.60-9.al8.x86_64

两层Cgroup同时throttle时会导致rq->nr_running低于正常值,出现下溢出的情况,从而导致load统计不正确、调度异常、soft lockup等问题。其中soft lockup提示以下调用栈信息:

Sep 7 20:24:47 l80c11217.ea120 kernel: INFO: task bash:130503 blocked for more than 122 seconds.
Sep 7 20:24:47 l80c11217.ea120 kernel: Tainted: G S OE 5.10.23-001.ali5000_20210905_2f9a6ae7f7_cbp.alios7.x86_64 #1
Sep 7 20:24:47 l80c11217.ea120 kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Sep 7 20:24:47 l80c11217.ea120 kernel: task:bash state:D stack: 0 pid:130503 ppid:130502 flags:0x00000000
Sep 7 20:24:47 l80c11217.ea120 kernel: Call Trace:
Sep 7 20:24:47 l80c11217.ea120 kernel: __schedule+0x283/0x6d0
Sep 7 20:24:47 l80c11217.ea120 kernel: ? cpu_stop_queue_work+0x79/0x160
Sep 7 20:24:47 l80c11217.ea120 kernel: ? usleep_range+0x80/0x80
Sep 7 20:24:47 l80c11217.ea120 kernel: schedule+0x46/0xb0
Sep 7 20:24:47 l80c11217.ea120 kernel: schedule_timeout+0xff/0x140
Sep 7 20:24:47 l80c11217.ea120 kernel: ? __trace_bprintk+0x6e/0x80
Sep 7 20:24:47 l80c11217.ea120 kernel: ? __prepare_to_swait+0x4b/0x70
Sep 7 20:24:47 l80c11217.ea120 kernel: __wait_for_common+0xa6/0x150
Sep 7 20:24:47 l80c11217.ea120 kernel: stop_one_cpu+0xab/0xe0
Sep 7 20:24:47 l80c11217.ea120 kernel: ? set_cpus_allowed_ptr+0x10/0x10
Sep 7 20:24:47 l80c11217.ea120 kernel: ? select_task_rq_fair+0x12c/0x2e0
Sep 7 20:24:47 l80c11217.ea120 kernel: sched_exec+0x88/0xd0
Sep 7 20:24:47 l80c11217.ea120 kernel: bprm_execve+0xec/0x230
Sep 7 20:24:47 l80c11217.ea120 kernel: do_execveat_common+0x192/0x1c0
Sep 7 20:24:47 l80c11217.ea120 kernel: __x64_sys_execve+0x39/0x50
Sep 7 20:24:47 l80c11217.ea120 kernel: do_syscall_64+0x2d/0x40
Sep 7 20:24:47 l80c11217.ea120 kernel: entry_SYSCALL_64_after_hwframe+0x44/0xa9
Sep 7 20:24:47 l80c11217.ea120 kernel: RIP: 0033:0x1461f4de5c37
Sep 7 20:24:47 l80c11217.ea120 kernel: RSP: 002b:00007ffcd19c8058 EFLAGS: 00000202 ORIG_RAX: 000000000000003b
Sep 7 20:24:47 l80c11217.ea120 kernel: RAX: ffffffffffffffda RBX: 00000000011fcc20 RCX: 00001461f4de5c37
Sep 7 20:24:47 l80c11217.ea120 kernel: RDX: 00000000011fbcf0 RSI: 00000000011fcca0 RDI: 00000000011fcc20
Sep 7 20:24:47 l80c11217.ea120 kernel: RBP: 00000000011fcc60 R08: 0000000000000000 R09: 0000000000000018
Sep 7 20:24:47 l80c11217.ea120 kernel: R10: 00007ffcd19c74a0 R11: 0000000000000202 R12: 0000000000000000
Sep 7 20:24:47 l80c11217.ea120 kernel: R13: 00000000011fcca0 R14: 00000000011fbcf0 R15: 0000000000000000

问题原因

两层Cgroup同时throttle时没有判断调度实体是否为空,直接将rq->nr_running减一,导致rq->nr_running统计异常。

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

当遇到该问题时,您可以参考以下任意方法进行处理。

方法一:升级系统内核

请根据现场实际情况,选择以下对应的步骤。

升级内核版本

  1. 登录ECS实例,详情请参见连接方式概述
  2. 执行以下命令,确认系统内核版本适用此方案。
    uname -r
    系统显示类似如下。
    5.10.60-9.al8.x86_64
  3. 对于5.10.60-9.al8.x86_64版本,执行以下命令,将操作系统版本更新至最新的内核版本。
    yum update kernel
    说明:
    • 或者您也可以将操作系统版本,回退至上个版本。
    • 如果您使用的是最新的操作系统版本,若遇到了该问题,请执行安装内核热补丁步骤。
  4. 更新内核版本之后,需重启生效,请执行以下命令,重启服务器。
    reboot

安装内核热补丁

  1. 执行以下命令,确认系统内核版本适用此方案。
    uname -r
    系统显示类似如下。
    5.10.60-9.al8.x86_64
  2. 对于5.10.60-9.al8.x86_64版本,执行以下命令,安装内核热补丁。
    yum install -y kernel-hotfix-6972801-`uname -r | awk -F"-" '{print $NF}'`
  3. 更新内核热补丁之后,需重启才能清除错误状态,请执行以下命令,重启服务器。
    reboot

方法二:避免两层配置cpu.cfs_quota_ns

避免两层及两层以上的Cgroup同时配置cpu.cfs_quota_ns。

适用于

  • 云服务器ECS

如果您的问题仍未解决,您可以在阿里云社区免费咨询提交工单联系阿里云技术支持。

首页 Alibaba Cloud Linux 3系统的ECS实例中rq->nr_running在throttle场景下统计异常