分享

正常的应用多久一次Full GC?汗血宝马

 liang1234_ 2020-11-11
发表于 作者 admin

我查看我们服务器的状态,半个月发生了900+次full gc,大约20分钟一次full gc,这是正常的吗?或者说优化到多久一次会比较合理?

虽然没有优化过。不过觉得这个需要按照实际的业务需求和业务能力去做支撑.才好优化。

看java应用的heap大小以及qps,不过初步看20分钟一次的full gc,貌似不大正常

jvm的优化谈起来可以讲几个小时,这里简单的给你点意见,不系统的展开说。

其一 :你的问题是full gc 频繁,看下总内存和老年代设置的是否太小了。
主要是看参数 -Xmx , -Xmn. 若是太小的话,必然会gc频繁。

其二:添加以下参数
-verbose.gc -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -Xloggc:/data/log/xxx/xxx-gc.log -XX:+PrintGCDetails
查看每次gc ,老年代还剩余多少空间,一般来说,老年代的空间设置为gc后内存的2-2.5倍是一个较为合理的数值。
同时通过这个日志可以看到是否大量的对象没有在新生代充分的gc掉就进入老生代。原本可以通过新生代回收的对象进入老年代的话必然会full gc 频繁

其三 : 代码原因 dump 内存
jmap -dump:live,format=b,file=xx.bin [pid]
然后通过MAT(http://www./mat/)工具来看具体是哪块大内存没有被释放

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多