sidecar內存持續升高有什么解決辦法?
更新時間 2024-09-09 19:55:54
最近更新時間: 2024-09-09 19:55:54
分享文章
問題現象
pod中istio 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緩沖配置導致的內存升高,我們將在后續的版本中提供優化方案。