为什么Sidecar的内存持续升高?

本文介绍Sidecar的内存持续升高的问题现象、问题原因和解决方案。

问题现象

在容器Pod的内存监控中,发现Sidecar的内存持续升高。

问题原因

内存持续升高的原因及说明如下。
原因说明
Sidecar配置默认情况下,Sidecar拥有集群下所有服务的端点信息和相关配置。这部分配置会占有一定的内存。随着集群下部署的业务服务数增多,配置也会增多,导致内存变大。
实时请求的流量Envoy作为转发代理,会存在接收和响应的Buffer,以及一些请求的缓存队列,这些都会占用内存。
Metrics指标发散当Metrics指标发散时,占用的内存逐渐增多。
gRPC流控相关数据Sidecar的HTTP2解码器包含initial_stream_window_sizeinitial_connection_window_size两个参数,分别对应Sidecar在HTTP2编解码缓冲区中流级别的缓冲字节限制、连接级的缓冲字节限制。默认情况下,这两个参数被设定为256 MB。当服务的数据处理能力不足时,数据会在Sidecar内存中堆积,导致内存占用增长。

解决方案

Sidecar配置

您可以登录ASM控制台,在Sidecar资源推荐页面配置Sidecar的服务范围,减少Sidecar的内存占用。具体操作,请参见配置推送优化概述

实时请求的流量

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择数据面组件管理 > Sidecar代理配置
  3. Sidecar代理配置页面的全局页签,单击按端口或地址来启用/禁用Sidecar代理,配置拦截范围。
    例如,您可以将中间件Redis(2379端口)、MySQL(3306端口)或集群外部的请求等,设置为不拦截。全局配置

Metrics指标发散

您可以通过配置指标过滤,设置相关指标不进行统计。具体操作,请参见在ASM中自定义监控指标

gRPC流控相关数据

gRPC请求和上下游服务对应的Stream的大小以及单个Stream Buffer相关。您可以登录ASM控制台,设置HTTP2的初始流量窗口大小,优化Envoy的内存占用。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择插件扩展中心 > 插件市场
  3. 插件市场页面,单击设置http2的初始流量窗口大小卡片,进行相关配置。