如何在Envoy配置文件中设置Envoy proxy内存使用上限
Envoy Proxy内存限额配置方案
可以直接通过Envoy配置文件设置内存使用上限,从进程层面避免内存耗尽引发Pod驱逐,具体配置方式如下:
- 基于Envoy原生过载管理器设置硬内存阈值
在Envoy启动加载的bootstrap配置文件中添加overload_manager配置块,通过固定堆内存监控器定义最大可用内存,同时配置不同内存水位下的保护动作,参考配置:
配置生效后Envoy会按设定的周期检测内存占用,在触达阈值时自动执行预设的保护动作,不会无限制占用内存。overload_manager: refresh_interval: 0.25s resource_monitors: - name: "envoy.resource_monitors.fixed_heap" typed_config: "@type": type.googleapis.com/envoy.extensions.resource_monitors.fixed_heap.v3.FixedHeapConfig # 按实际业务需求设置最大堆内存,单位为字节,示例为2GiB max_heap_size_bytes: 2147483648 actions: # 内存占用达阈值90%时,主动触发GC回收堆内存 - name: "envoy.overload_actions.shrink_heap" triggers: - name: "envoy.resource_monitors.fixed_heap" threshold: value: 0.9 # 内存占用达阈值95%时,停止接收新请求,阻断内存继续上涨 - name: "envoy.overload_actions.stop_accepting_requests" triggers: - name: "envoy.resource_monitors.fixed_heap" threshold: value: 0.95 - Kubernetes环境配合容器Limit做双层防护
如果是在K8s集群中部署Envoy(不管是独立网关还是Sidecar模式),建议同时给Envoy容器配置resources.limits.memory参数,让K8s在容器内存超限时直接重启单容器,避免影响同节点其他业务Pod。注意这个Limit值需要比上面配置的max_heap_size_bytes高10%~15%,给线程栈、缓冲区等非堆内存留出冗余,防止Envoy还没触发自身过载保护就被系统OOM杀死。 - 配置注意事项
不要把内存限额当成唯一解决方案,如果配置后频繁触发内存阈值,优先排查根因:常见诱因包括统计指标基数爆炸、并发连接数配置超出实际承载能力、使用的Envoy版本存在已知内存泄漏Bug,这类问题单纯调大内存限额无法根治。
内容的提问来源于stack exchange,提问作者GreatBear
相关产品推荐
相关产品推荐

