云搜索服务 CSS-配置Elasticsearch集群读写流量控制策略2.0:开启内存流控
开启内存流控
- 执行如下命令,开启内存流控。
PUT /_cluster/settings { "persistent": { "flowcontrol.memory.enabled": true, "flowcontrol.memory.heap_limit": "80%" } }
表3 内存流控的配置项说明 配置项
类型
说明
flowcontrol.memory.enabled
Boolean
内存流控开关,开启后持续监控内存使用情况。
取值范围:- true
- false(默认值)
flowcontrol.memory.heap_limit
String
节点堆内存的阈值,限制节点全局堆内存的使用率,超过此值将进行流量反压。
取值范围:10%-100%
默认值:90%
说明:- 默认值90%是一个比较保守的阈值,即堆内存大于90%使用量时会停止读取客户端超过64KB的大请求,直至堆内存下降。如堆内存下降到85%,会开始允许最多一次读取“5%×堆内存最大值”的客户端数据量。如果堆内存持续超过90%,则无法放开客户端连接的请求读取,此时会尝试触发GC算法进行垃圾回收,直到堆内存低于所设定的阈值。
- 日常使用时可以将“flowcontrol.memory.heap_limit”阈值设置为80%或以下,保证节点有一定的堆内存余量,供写入内存以外的行为使用,比如:Elasticsearch查询、Segment merge等。
flowcontrol.holding.in_flight_factor
Float
反压释放因子,原理类似于熔断器“network.breaker.inflight_requests.overhead”参数。内存达到限制值时,该值越大反压越强,写入流量将受限。
取值范围:≥0.5
默认值:1.0
flowcontrol.holding.max
TimeValue
每个请求最长的延迟时间,当延迟超过此值时可以设置断开该请求反压或断开请求链路。详见“flowcontrol.holding.max_strategy”配置。
取值范围:≥15s
默认值:60s
flowcontrol.holding.max_strategy
String
超过最大延迟时间后的运行策略。
取值范围:- keep(默认值):如果堆内存仍在高位,选择继续反压 - 何时执行请求仍由服务器根据实时内存自主决定。
- soft:如果堆内存仍在高位,也必须执行该请求。执行/拒绝权力交给inFlight熔断器。
- hard:如果堆内存仍在高位,丢弃该请求,同时断开该请求的客户端连接。
flowcontrol.memory.once_free_max
String
被暂停的请求队列一次性最大重新打开的内存,防止强压场景下短暂的低内存现象一次性冲挂集群。
取值范围:1%-50%
默认值:10%
flowcontrol.memory.nudges_gc
Boolean
写入压力过大时(1s检查一次反压连接池,所有现有连接均被阻塞无法放开新的写入请求),是否尽力触发垃圾回收,保证写入稳定性。取值:
- true(默认值)
- false
当所有参数指设置为“null”时,表示恢复配置默认值。
- 执行如下命令,关闭集群内存流控。
PUT /_cluster/settings { "persistent": { "flowcontrol.memory.enabled": false } }