那位大神帮我看看 FULL GC 时间过长怎么定位

2018-01-16 17:19:58 +08:00
 pank

由于我在压测的时候 qps 一直不达标(现在接近 300,但要求是 500 )。在阿里的 apm 上查看有慢事务,点进去以后感觉有点奇怪,除了核心业务代码之外还有很长时间不知道耗费在哪。

阿里的技术人员说可能是因为 gc 的问题,观察 jvm 监控,发现垃圾回收时间确实有点长:

fullgc 上耗时接近 4s,请教一下懂这个的大哥帮我分析分析哈。

jvm 参数:-Xms30g -Xmx30g -Xmn20g

jmap 查看如下图:

9184 次点击
所在节点    Java
12 条回复
anthow
2018-01-16 17:25:57 +08:00
30g...
jadec0der
2018-01-16 19:55:00 +08:00
对你的内存来说,这个时间并不长,你应该想办法避免 FullGC。或者是控制 FullGC 的时候摘掉流量
neoblackcap
2018-01-16 20:02:10 +08:00
30G 的内存是不是可以无脑推 JDK8 以上呢?毕竟 G1 我记得是用 CPU 换更低的回收时间
feverzsj
2018-01-16 20:07:06 +08:00
你虚拟机内存多大啊,一般这种大都是 virutal memory trashing
honeycomb
2018-01-16 23:56:08 +08:00
这么大的堆,试试 G1 ?
coolcfan
2018-01-17 00:37:36 +08:00
让 JVM 输出 GC Log,告诉你 Full GC 的原因
pank
2018-01-17 10:53:41 +08:00
@jadec0der 谢谢回复,怎么可以避免 full gc 呢
pank
2018-01-17 10:54:29 +08:00
@neoblackcap 我换了 G1 以后 fullgc 倒是没有了,youngGC 又上去了。。。,qps 还下去了。
pank
2018-01-17 10:55:50 +08:00
@feverzsj 物理内存是 32g
jadec0der
2018-01-17 11:30:04 +08:00
@pank coolcfan 不是已经告诉你了吗
neoblackcap
2018-01-17 11:34:27 +08:00
@pank 不想自己继续搞的话,上 Azul 的 Zing JVM 吧,4T 都能保持在 10ms 一下。不过啊,我觉得你可能还是打一下 snapshot 之类的看看堆里面到底是什么对象比较多,为什么那么容易触发 gc,是内存泄漏了,还是自己的程序有问题。确定程序没有问题再调优吧。
要不然你程序有问题,上了 Zing JVM 也是用钱搞定而已
kiddult
2018-01-19 12:38:13 +08:00
-Xmn 设置小一些,比如 1G 或者 2G,自己试验一下比较好,youngGC 多点问题不大,时间不会耗在这上面多少,太大了会导致 GC 时间太长

QPS 先看看没有 GC 的那段时间是多少,一般和 GC 关系不应该太大才对,GC 占用程序的总时间比例很小的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/423387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX