Too many origins causing FGC | gateway 接入 sentinel

spring cloud gateway 接入 sentinel ,利用 GatewayCallbackManager.setRequestOriginParser() 注入自定义解析 origin 方法时,会出现内存打满,频繁 full gc 问题。

1、在 spring cloud gateway 自定义了 requestOriginParser 方法的情况下,代码如图

提问39.png

2、自定义 origin,每个 origin 都会创建一个 StatisticNode 对象,以下是找到的源码截图。

提问40.png

提问41.png

并且创建的时候会重新 new 一个 map 再去 putAll,在 originCountMap 已经很大的情况下,这种效率是非常低下的。

3、再附上一张 MAT 分析 dump 文件的截图,ClusterNode 里面的 originCountMap 有近 17w 个对象,已经超过 1G 了。

提问42.png

问题复现 demo: https://github.com/binglang2/sentinel-demo

spring boot:2.3.2.RELEASE spring cloud alibaba:2.2.6.RELEASE sentinel:1.8.1 jdk:1.8

原提问者GitHub用户binglang2

展开
收起
学习娃 2023-05-19 15:04:12 194 分享 版权
1 条回答
写回答
取消 提交回答
  • 可以参考 FAQ,来源限流需要控制来源数目;网关流控建议通过配置针对请求属性流控(如 header,IP)的方式来做来源流控。

    https://github.com/alibaba/Sentinel/wiki/FAQ#q-%E6%80%8E%E4%B9%88%E9%92%88%E5%AF%B9%E7%89%B9%E5%AE%9A%E8%B0%83%E7%94%A8%E7%AB%AF%E9%99%90%E6%B5%81%E6%AF%94%E5%A6%82%E6%88%91%E6%83%B3%E9%92%88%E5%AF%B9%E6%9F%90%E4%B8%AA-ip-%E6%88%96%E8%80%85%E6%9D%A5%E6%BA%90%E5%BA%94%E7%94%A8%E8%BF%9B%E8%A1%8C%E9%99%90%E6%B5%81%E8%A7%84%E5%88%99%E9%87%8C%E9%9D%A2-limitapp%E6%B5%81%E6%8E%A7%E5%BA%94%E7%94%A8%E7%9A%84%E4%BD%9C%E7%94%A8

    原回答者GitHub用户

    2023-05-19 20:11:42
    赞同 展开评论
问答分类:
问答标签:
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

还有其他疑问?
咨询AI助理