spring cloud gateway 接入 sentinel ,利用 GatewayCallbackManager.setRequestOriginParser() 注入自定义解析 origin 方法时,会出现内存打满,频繁 full gc 问题。
1、在 spring cloud gateway 自定义了 requestOriginParser 方法的情况下,代码如图
2、自定义 origin,每个 origin 都会创建一个 StatisticNode 对象,以下是找到的源码截图。
并且创建的时候会重新 new 一个 map 再去 putAll,在 originCountMap 已经很大的情况下,这种效率是非常低下的。
3、再附上一张 MAT 分析 dump 文件的截图,ClusterNode 里面的 originCountMap 有近 17w 个对象,已经超过 1G 了。
问题复现 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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
可以参考 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用户
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。