值得阅读的内存泄露分析总结和Tomcat调优
然后为了确定我这个猜测我又去看了启动日志,在启动日志中看到了: 这不赤裸裸的告诉我们开启了APR的模式嘛。。。这就意味着上面根据Tomcat8默认NIO模式用到了直接内存,得出的关于我的应用部署的Tomcat为什么占用内存持续上升的结论是不成立的!虽然Tomcat确实有NIO的模式,NIO也确实会用到直接内存,分配直接内存时确实会手动调用system.gc(),然后tomcat里面配置-XX:DisableExplicitGC确实会影响内存分配导致直接内存堆积,可是和我这并没什么关系啊。。此时心里万马奔腾,但我冷静一想当我去掉-XX:DisableExplicitGC时,GC日志里面出现了很多Full GC的日志,那不是因为分配直接内存引起的还有谁再调用呢。没办法,只能一直手动抓线程栈来分析,用下面的指令就可以把当前线程栈输出到一个txt文档中。
这个pid就是你的java线程id。果然抓了几次就被我抓到了现场,线程栈中果然有个线程在执行gc操作,看下图: 这次感觉自己应该是找到了问题本质了,光看这个也看不出什么然后上网搜了下,发现也是Tomcat配置引起的,真相只有一个就是下面这个配置: (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |