
# 容器监控的内存使用率与实际弹性伸缩现象不一致
#### 问题现象
容器监控的内存使用率与实际弹性伸缩现象不一致，例如容器内存使用率在界面上显示为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计算的内存使用率。
 
