本文介绍Sidecar的内存持续升高的问题现象、问题原因和解决方案。
问题现象
在容器Pod的内存监控中,发现Sidecar的内存持续升高。
问题原因
内存持续升高的原因及说明如下。
原因 | 说明 |
Sidecar配置 | 默认情况下,Sidecar拥有集群下所有服务的端点信息和相关配置。这部分配置会占有一定的内存。随着集群下部署的业务服务数增多,配置也会增多,导致内存变大。 |
实时请求的流量 | Envoy作为转发代理,会存在接收和响应的Buffer,以及一些请求的缓存队列,这些都会占用内存。 |
Metrics指标发散 | 当Metrics指标发散时,占用的内存逐渐增多。 |
gRPC流控相关数据 | Sidecar的HTTP2解码器包含initial_stream_window_size和initial_connection_window_size两个参数,分别对应Sidecar在HTTP2编解码缓冲区中流级别的缓冲字节限制、连接级的缓冲字节限制。默认情况下,这两个参数被设定为256 MB。当服务的数据处理能力不足时,数据会在Sidecar内存中堆积,导致内存占用增长。 |
解决方案
Sidecar配置
您可以登录ASM控制台,在Sidecar资源推荐页面配置Sidecar的服务范围,减少Sidecar的内存占用。具体操作,请参见配置推送优化概述。
实时请求的流量
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在Sidecar代理配置页面的全局页签,单击按端口或地址来启用/禁用Sidecar代理,配置拦截范围。例如,您可以将中间件Redis(2379端口)、MySQL(3306端口)或集群外部的请求等,设置为不拦截。
Metrics指标发散
您可以通过配置指标过滤,设置相关指标不进行统计。具体操作,请参见在ASM中自定义监控指标。
gRPC流控相关数据
gRPC请求和上下游服务对应的Stream的大小以及单个Stream Buffer相关。您可以登录ASM控制台,设置HTTP2的初始流量窗口大小,优化Envoy的内存占用。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在插件市场页面,单击设置http2的初始流量窗口大小卡片,进行相关配置。
文档内容是否对您有帮助?