代码改变世界

系统假死——系统频繁Full gc问题分析

2017-04-17 11:49  Loull  阅读(1278)  评论(0)    收藏  举报

主要可能的原因:

1,eden区太小,eden和survivor默认比例是8:1
2,old区太小,新生代和老年代的比例也可以调节的。
3,是否程序会分配很多短期存活的大对象,程序本身是否有问题?

 

进入老年区的影响因素不只是一个survivor啊。还有对象大小,存活次数,新生区老年区大小等因素。单纯改survivor大小有点盲目。
还有你只是单纯的觉得full gc频繁,那你综合分析过没。是否在你压测配置的资源情况下,其实已经达到最优了?
另外还可以通过其他工具检测下都是哪些对象在占用大量内存资源。
 

大对象样例:

http://itindex.net/detail/53283-%E7%B3%BB%E7%BB%9F-full-gc

 

full gc耗时和对象数量和对象大小有关,持续时间不一定。比如耗时2~3秒,这么短时间内服务一般不会从配置中心删掉,所以这时候的调用可能超时。