一台机器频繁fullgc,每分钟一次。通过分析发现dubbo的NettyChannel存在内存泄露问题,怀疑是dubbo版本不兼容或老版本有问题。先重启应用,减少堆中NettyChannel占用。源码分析发现NettyPortUnificationServerHandler没有处理channelInactive或exceptionCaught,已有修复merge。应用中间件升级版本需要保持一致,避免已知问题。
本文记录了一次排查FullGC导致的TP99过高过程,介绍了排查思路、线索和工具的使用。通过分析年轻代区域变化和关闭AdaptiveSizePolicy参数解决了FullGC问题。同时,通过修改逻辑代码防止频繁加载新类解决了FullGC问题。排查问题时要找直接原因,缩小排查范围。
本文主要讲述了Java语言的特性和垃圾回收机制,以及频繁Full GC的问题。通过分析JVM参数、Tomcat参数、堆栈文件和代码,发现内存泄漏的原因是每个线程中存储了大量的SessionInMemory对象,导致内存占用过高。解决方案包括删除过期的Session、取消ThreadLocal策略、使用本地缓存和减少Tomcat的核心线程数。最终,作者定位到问题的根本原因是shiro-redis组件的版本问题,升级到3.2.3版本后解决了该问题。文章还总结了在报警前后应该注意的事项和收获。
JVM 提供独立于操作系统的运行环境,通过调整堆内存大小、内存优化、减少数据对象生命周期、使用弱引用等方法来避免 Full GC,定期监测 GC 日志、数据结构优化、关注单元测试、日常业务代码测试可以提前解决隐患。
完成下面两步后,将自动完成登录并继续当前操作。