You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemMemoryExceedsReservation告警规则含义及异常触发问题咨询

SystemMemoryExceedsReservation告警规则说明与异常原因分析

规则判定逻辑

你给出的是Prometheus告警规则,核心判定逻辑可以拆成三部分:

expr: |
sum by (node) (container_memory_rss{id="/system.slice"}) > ((sum by (node) (kube_node_status_capacity{resource="memory"} - kube_node_status_allocatable{resource="memory"})) * 0.95)
    for: 15m
    labels:
severity: warning
  • 左侧计算项:按节点维度聚合/system.slice cgroup下所有进程的RSS常驻内存总和,统计的是节点上由systemd直接管理的系统级服务(比如sshd、systemd-journald、节点级监控代理、K8s静态组件等非Pod管辖进程)占用的物理内存,完全不包含业务Pod的内存占用
  • 右侧阈值项:先按节点维度计算节点总内存容量(kube_node_status_capacity)和K8s可调度给Pod的内存量(kube_node_status_allocatable)的差值,这个差值就是节点给非Pod进程预留的总内存额度,再取这个额度的95%作为告警触发线
  • 触发要求:上述左侧值连续15分钟高于右侧阈值,就触发warning级别的告警

异常触发原因

你提到的两个现象不冲突,核心是统计口径和指标采集的问题:

  1. 你查到的「节点内存限制使用率超过131%」和这个告警的统计范围完全不一致:这个使用率一般是节点总内存维度、包含所有Pod进程的占用统计,而告警只看system.slice下的系统服务内存,所以你查不到系统服务侧的内存突增是正常情况,业务Pod的内存涨跌本来就不会被这个规则统计
  2. 告警内容里节点位置为空(提示System memory usage of 1.161G on exceeds,on后面没有节点名),是典型的指标标签不匹配问题:
    • 计算阈值用到的kube_node_status_capacity、kube_node_status_allocatable指标(来自kube-state-metrics)的node标签值,和container_memory_rss指标(来自cadvisor)的node标签值不一致,比如一边是纯节点名node-01,一边带域名后缀node-01.cluster.local,会导致按node聚合做差的时候,算出来的预留内存值异常偏小。比如实际预留是2G,标签错配后算出来只有1.2G,那1.161G的系统服务占用自然会触发阈值
    • 也有可能是指标采集断流、重启导致某段时间上报的allocatable内存值异常偏高,让「总容量-可调度量」的预留值计算结果偏小,误触发告警
  3. 如果排除标签问题,还有一种常见情况:节点启动时配置的system-reserved系统预留内存参数设的过小,比如32G内存的节点只给系统服务留了1.2G额度,那系统服务日常稳态运行的内存占用就会摸到95%的阈值,不需要内存突增也会持续触发告警

内容的提问来源于stack exchange,提问作者Himanshu Gude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:06:25