应用服务网格

sidecar内存持续升高有什么解决办法?

2025-08-14 09:23:26

问题现象

podistio sidecar容器监控中发现内存消耗持续升高

原因分析

istio采用envoy作为数据面代理,动态内存消耗主要有以下方面:

原因

说明

网格配置

默认情况下网格中的配置和服务发现信息会全量同步到所有sidecar,当网格中的配置增多或者pod数量增多时,将导致sidecar代理的内存升高

动态请求消耗的内存

Envoy中会为请求申请buffer用于缓存请求及应答信息,当请求量和消息比较大的时候会增加内存消耗

可观测指标发散

当指标的tag较多时将会在内存中产生较多副本,增加内存消耗

HTTP2流量控制相关

Sidecar实现HTTP2编解码中有流级别及连接级别的缓存字节数限制,默认为256MB,当sidecar处理能力不足将导致数据在内存中累积

解决:

对于网格配置导致的sidecar内存升高,可以通过限定资源的可见范围较少配置扩散,如VirtualService、DestinationRule的exportTo字段指定配置分发的命名空间;通过配置Sidecar资源,限定当前服务可见的服务发现范围等。

对于动态请求导致的内存消耗,考虑减少sidecar代理的流量。默认情况下sidecar会拦截所有inbound和outbound的流量,可以根据业务需要对不需要代理的端口取消流量拦截;具体可以通过sidecar管理-sidecar代理配置菜单下配置全局及命名空间级别的流量拦截策略。

对于指标发散和HTTP2缓冲配置导致的内存升高,我们将在后续的版本中提供优化方案。


sA2iaB1Mv9Kk