如何解决K8s上运行的Hyperledger Fabric Peer内存占用过高问题
Hyperledger Fabric v2.3 Peer性能优化可配置参数
针对你遇到的并发交易下内存持续占用不释放、触发K8s资源上限的问题,可调整以下核心参数优化:
一、Gossip协议层内存优化参数
CORE_PEER_GOSSIP_MAXPROPAGATIONBURSTSIZE:Gossip节点单次传播的最大消息数量,默认值为100,高并发下会瞬时堆压大量protobuf格式的交易消息,可调整为10~20,减少瞬时消息堆积占用的内存。CORE_PEER_GOSSIP_MAXMESSAGECOUNT:Gossip层缓存的最大消息数,默认值为100,大量历史交易消息会长期缓存不释放,可调整为20~30,强制Gossip层及时清理过期消息。CORE_PEER_GOSSIP_PURGEINTERVAL:Gossip层过期消息清理周期,默认值为15s,可调整为5s,加快无用交易消息的回收速度。CORE_PEER_GOSSIP_CONNTIMEOUT/CORE_PEER_GOSSIP_DIALTIMEOUT:Gossip连接建立/超时时间,默认值均为3s,可调整为1s,快速销毁无效连接对应的缓存数据,避免无效资源占用。
二、交易与链码处理层优化参数
CORE_PEER_TXTHROTTLE_MAXPENDING:Peer端最大待处理交易数,默认无限制,可根据资源配置调整为100~200,超过阈值的交易直接返回拒绝,避免无限制堆积交易上下文打满内存。CORE_CHAINCODE_EXECUTETIMEOUT:链码执行超时时间,默认值为30s,大量超时的交易执行上下文不会被及时销毁,可调整为5~10s,快速释放执行失败/超时的交易资源。CORE_VM_ENDPOINT_TIMEOUT:外部链码连接超时时间,默认值为5s,你使用外部链码的场景下可调整为2s,避免未建立的链码连接、慢响应链码占用交易上下文内存。
三、Go运行时GC优化参数
Fabric Peer基于Go语言开发,默认GC触发阈值为内存较上次GC后增长100%,容易出现交易处理完成后内存迟迟不回收的问题:
- 配置环境变量
GOGC:默认值为100,可调整为2050,即内存增长20%50%就触发GC,通过小幅提升CPU占用换取内存及时回收,你的Peer CPU配额有富余,该调整不会影响正常业务。
四、额外适配建议
你当前配置的Peer内存limits和requests差值仅50Mi,缓冲空间极小,很容易在GC触发前就触及K8s资源上限被驱逐,建议将limits调整为1.5Gi,requests调整为1Gi,预留足够的GC缓冲空间。
内容的提问来源于stack exchange,提问作者Niraj Kumar
相关产品推荐
相关产品推荐

