The client heap memory usage is too large (客户端内存占用过大)
Issue Description
Type: feature request
Describe what happened (or what feature you want)
客户端集成到服务以后,通过对比接入前与接入后的监控信息发现,接入sentinel后内存占用明显升高。
平均内存占用增加350MB,峰值内存占用增加900多兆,并且主要集中在老年代。
通过分析jvm dump文件,占用内存较大的几个对象是:com.alibaba.csp.sentinel.node.metric.MetricNode、java.util.concurrent.atomic.LongAdder、com.alibaba.csp.sentinel.slots.statistic.base.WindowWrap等。

Describe what you expected to happen
作为一个微服务,这些内存占用有些难以让人接受,希望能尽量减少内存的占用。
How to reproduce it (as minimally and precisely as possible)
- MetricNode对象的生成主要来自控制台拉取日志时,客户端读取metric日志,转换成了MetricNode对象。从阅读源码可知,读取日志时,将String转换为MetricNode,再将MetricNode转换成String。是否多此一举,直接将日志发给控制台即可?这样可以减少很多对象的创建以及内存占用。
- 其它几个高占用对象,粗略看了下源码发现,几乎来自于StatisticSlot中,用来统计resource信息的。不知后续这块是否会有优化计划。如果短期没有,希望给与我一些提示,从哪些角度去优化。从业务角度出发,我能想到的是,通过设置resource白名单,减少对一些不重要的接口做统计,尽量减少内存占用。
Tell us your environment
sentinel 1.8.2 openjdk 1.8 springboot 2.x
Anything else we need to know?
控制台每隔十秒从客户端拉取meteic信息。
我也碰到这个问题了, 时间越长, 堆积的越厉害 java.util.concurrent.atomic.LongAdder内存占比高达70%
我也碰到这个问题了, 时间越长, 堆积的越厉害 java.util.concurrent.atomic.LongAdder内存占比高达70%
这个问题其实挺严重的,官方没有很重视,内存占用大的话根本无法上生产
这个问题有进展吗
https://github.com/alibaba/Sentinel/pull/2802 MetricNode 对象的占用有缓解。LongAddr 可以从业务角度出发,减少统计。
- spring.cloud.sentinel.filter.enabled 如果是开启的化,默认 /** ,监控所有控制器的方法
- feign.sentinel.enabled 开启的化也是所有服务的 feign监控 3.MetricNode 占用高其实就是监控的资源比较多,看情况配置吧,一般不需要都监控
生产上有遇到 YGC 某一瞬间耗时突增,后续时间越来越长,dump 出来发现 MetricNode 对象实例最多,占用内存快800M 了;不知道是不是这个影响的 YGC 耗时
同遇到该问题,只要引用了包就会统计,大量占用内存,10堆内存sentinel占用了2个多g
确实占用太大了,半年后需要占用几个G,盼修复
在JDK21-虚拟线程上也出现同样问题, 极端情况可能造成GC卡死的情况, 小服务, 访问量不大 , 但是MetricNode太多了
num #instances #bytes class name (module)
-------------------------------------------------------
1: 763402 301735000 [B ([email protected])
2: 7333 51136656 [C ([email protected])
3: 30978 49766888 Ljdk.internal.vm.FillerArray; ([email protected])
4: 267681 21414480 com.alibaba.csp.sentinel.node.metric.MetricNode
5: 541147 17316704 java.util.HashMap$Node ([email protected])
6: 112535 12039152 [Ljava.lang.Object; ([email protected])
7: 445648 10695552 java.lang.String ([email protected])