perm已经满了?但是设置的时候明明max是256m,根本就还没有满,猜测permanent区导致的Full GC的可能性不大。不过还是重新设置了一下初始值,但不抱希望,事实证明确实是这样的。于是再次分析哨兵平台,尝试调出full gc的时间段内的接口调用情况,目的是为了定位出哪个接口可能会触发full gc的,目光转移到一个调用耗时特别长的服务接口上
我们几乎可以断定是这个地方出的问题,默默加上启动参数-XX:DisableExplicitGC,重启应用,调用后一切终于回归正常,其实,如果我们能提前知道JDK7以上的显示调用gc和隐式调用gc的区别,就应该直接能从gc日志中判断出来问题根源,如下图:
从其他的服务中看到系统隐式调用的gc会在Full GC后带有System的标示,而显示调用其实是没有的。查资料时,顺带看到一段stackoverflow上一段OpenJDK的源码代码贴一下[1]:
本文来自网易实践者社区,经作者陈鸿钦授权发布。