
# 配置Dashboards查询响应熔断
在业务查询过程中，OpenSearch可能返回超大响应体，如全量索引导出、高基数字段聚合等。当OpenSearch Dashboards后端进程缓冲和解析这些超大响应时，堆内存会被迅速占满，导致进程OOM（Out of Memory，内存溢出）崩溃，影响所有用户的可视化操作。CSS服务提供查询响应熔断功能，在Dashboards后端进程收到响应但尚未缓冲body之前，根据响应头的content-length预估堆内存消耗，一旦超过阈值即销毁响应流并返回错误，避免进程崩溃。
#### 功能介绍
当OpenSearch Dashboards后端进程收到查询响应时，熔断器会在缓冲响应体之前进行判断，决定是放行还是拦截。
图1查询流程   
![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002651662578.png "点击放大")
熔断器满足以下任一条件即触发，触发后请求响应体会直接被丢弃：
- **绝对值上限**：当"maxContentLength \> 0"且"请求响应体的contentLength ≥ maxContentLength"时触发，表示响应体本身过大，无论当前堆占用如何都拒绝。
- **堆占用上限**：当"contentLength × heapMultiplier + heapUsed \> heapSizeLimit × maxPercentage"时触发，表示预估该响应入堆后会超过堆内存上限。
其中各参数含义如下：
- maxContentLength：响应体绝对上限。响应体大小达到该值即触发熔断。
- contentLength：当前请求响应体的大小，即HTTP响应头"content-length"字段的值。
- heapSizeLimit：进程的堆内存上限。
- heapUsed：进程当前已使用的堆内存。
- heapMultiplier：堆估算倍数，默认值为4。将contentLength放大后用于预估响应入堆后的内存占用。默认值4是因为JSON数据在JavaScript中解析为对象后，内存占用约为原始文本的3\~5倍，4倍是一个兼顾安全与资源的经验值。
- maxPercentage：堆占用上限比例。
![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/note_3.0-zh-cn.png)
查询响应熔断作用于Dashboards后端进程，与OpenSearch集群的[配置大查询隔离](https://support.huaweicloud.com/usermanual-css/css_01_0053.html)功能互补。前者保护Dashboards进程免受超大响应影响，后者管理引擎侧的大查询任务。
#### 约束限制
- 仅当OpenSearch集群版本号为2.19.0或3.4.0，且镜像版本号不低于x.x.x_26.6.0_xxx时，才支持Dashboards查询响应熔断功能。满足条件的集群**默认启用**该功能。
- 安全集群（开启"安全模式"的集群）的Dashboards查询响应熔断参数仅支持在Global租户下可见可改。
- Advanced Settings修改后不是即时生效，而是后台周期性同步，最迟1分钟后生效。
 
#### 登录Dashboards的Advanced settings页面
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，选择目标集群，单击操作列的"Dashboards"，登录OpenSearch Dashboards。
4. （可选）如果是安全集群，需要切换到Global租户才能配置Dashboards查询响应熔断参数。 在Dashboards页面，单击右上方用户名，选择"Switch tenants"，在Select your tenant页面选择"Global"，单击"Confirm"。
   
5. 在左侧导航栏选择"Management \> Dashboards Management"，选择"Advanced settings"，进入Settings页面。
 
#### 配置Dashboards查询响应熔断参数
1. 在Settings页面，找到Search模块，配置以下Dashboards查询响应熔断的参数。
   图2配置Dashboards查询响应熔断   
   ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002651642368.png "点击放大")
   表1Dashboards查询响应熔断的参数说明 
   | 参数                              | 类型      | 默认值       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                              |
   |:---|:---|:---|:---|
   | circuitBreaker:enabled          | Boolean | On        | 是否启用Dashboards查询响应熔断。 - On：启用。  - Off：关闭。关闭熔断功能后，Dashboards后端进程将不再拦截超大响应，大查询响应可能导致进程OOM崩溃，影响所有用户的可视化操作。建议仅在确认业务无大查询风险时关闭。   |
   | circuitBreaker:heapMultiplier   | Integer | 4         | 堆估算倍数，用于预估响应入堆后的内存占用。 取值范围：1\~10                                                                                                                                                                                                                                                                                                                                                  |
   | circuitBreaker:maxContentLength | Integer | 104857600 | 响应体绝对上限。 取值范围： - 0（表示不限）  - 1048576（1MB）\~1073741824（1GB）   单位：字节                           |
   | circuitBreaker:maxPercentage    | Float   | 1.0       | 堆占用上限比例。 取值范围：0.1\~1.0 1.0表示可用满堆。                                                                                                                                                                                                                                                                                                |
      
   
2. 修改完成后，单击"Save changes"保存参数。
3. 等待约1分钟后，执行一次大查询验证熔断功能生效。
   1. 在左侧导航栏选择"Dev Tools"，进入操作页面。
   
   2. 执行一次大查询，返回请求失败，错误码为502。
      图3大查询   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002686613661.png "点击放大") 
   
   3. 在浏览器，按**F12** 进入开发者工具，切换至"Network"页签，查看"Response"，显示"Memory circuit breaker triggered"，则表示查询响应已被熔断。
      图4查询响应   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002686493901.png "点击放大") 
    
 
