文档首页/ 云容器引擎 CCE_Autopilot集群/ 常见问题/ 工作负载/ 监控日志/ 容器监控的内存使用率与实际弹性伸缩现象不一致
更新时间:2024-11-08 GMT+08:00

容器监控的内存使用率与实际弹性伸缩现象不一致

问题现象

容器监控的内存使用率与实际弹性伸缩现象不一致,例如容器内存使用率在界面上显示为40%左右,而HPA设置缩容阈值为70%,但界面上显示的内存使用率低于HPA阈值后并没有发生缩容。

问题根因

界面上显示的容器内存使用率与HPA弹性伸缩的内存使用率在计算方式上存在差异:

  • 界面上显示的容器内存使用率计算方式为:container_memory_rss/内存Limit

    container_memory_rss(即Resident Set Size,RSS)包含了部分可能并不活跃或未被有效利用的内存部分。

  • HPA对于内存使用率弹性伸缩的计算方式为:container_memory_working_set_bytes/内存Request

    container_memory_working_set_bytes(即Working Set Size,WSS)的计算方式如下:

    在Pod中执行cat /sys/fs/cgroup/memory/memory.stat,得到total_cache(缓存内存量)、total_rss(当前应用进程实际使用内存量)、total_inactive_file(不活跃文件内存使用量)。

    WSS = total_cache + total_rss - total_inactive_file

如果您的应用存在以下情况,均可能导致HPA的扩容行为与预期不符,出现界面上显示的内存使用率低于HPA缩容阈值后并没有发生缩容,或者界面上显示的内存使用率未高于HPA扩容阈值但发生扩容等现象。

  • 应用缓存占用非常高,WSS明显大于RSS,导致界面上显示的容器内存使用率小于HPA计算的内存使用率。
  • Limit与Request配置差异较大时,Request明显小于Limit,导致界面上显示的容器内存使用率小于HPA计算的内存使用率。