Java 意外完全GC(人体工程学)
我运行的应用程序由3个阶段组成:加载初始数据、使用POST http请求更新数据、使用GET请求提供服务。 设置完所有数据(初始加载+后期更新)后,我调用System.gc(),我看到了Java 意外完全GC(人体工程学),java,garbage-collection,Java,Garbage Collection,我运行的应用程序由3个阶段组成:加载初始数据、使用POST http请求更新数据、使用GET请求提供服务。 设置完所有数据(初始加载+后期更新)后,我调用System.gc(),我看到了 [Full GC (System.gc()) 2051102K->1082623K(3298304K), 13.3521960 secs] 因此,我预计old gen需要大约1000M的内存,并使用这种设置运行我的应用程序(在4G RAM docker容器中): 因此,我预计,从3750M堆中,2550
[Full GC (System.gc()) 2051102K->1082623K(3298304K), 13.3521960 secs]
因此,我预计old gen需要大约1000M的内存,并使用这种设置运行我的应用程序(在4G RAM docker容器中):
因此,我预计,从3750M堆中,2550M将用于新空间,以满足GET请求,1200M将用于旧一代。
在我的申请工作中,我
[Full GC (Ergonomics) 2632447K->1086729K(3298304K), 2.3360398 secs]
所以对我来说,触发完全GC看起来很奇怪。我的理解是,因为GET请求不会添加任何长期存在的数据,所以当新一代已满时,它应该只是一个小GC。所以我不明白
1) 为什么它运行完全GC(人体工程学)-它想改变发电布局吗
2) 为什么它在3298304K中只有2632447K被占用时运行?几点:
- GET/POST与此无关,您为GET/POST实现的逻辑才是最重要的。。。e、 g.GET方法可能存在内存泄漏
- 不断增长的内存不一定会减少GC(它不会以线性方式工作)
- GC通常每活动GB冻结约1秒,因此,对于1GB,冻结13秒是值得检查的
- 下一步应该进行分析,以便更好地理解问题
-XX:MaxNewSize=2550m-XX:NewSize=2550m
。删除最大值,然后重试!alfasin,谢谢建议。我试着不用MaxNewSize跑步,但仍然有2017-09-03T23:13:51.282+0300:217.526:[完全GC(人体工程学)[PSYoungGen:1571840K->0K(2099712K)][ParOldGen:1081163K->1080718K(1228800K)]2653003K->1080718K(3328512K),[Metaspace:18569K->18569K->18569K(1067008K)],1.418698秒][次:用户=5.38系统=0.02,真实=1.42秒]1.4秒和13秒之间有很大差异。尝试将最小值增加到3GB
[Full GC (Ergonomics) 2632447K->1086729K(3298304K), 2.3360398 secs]