💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### FullGC频繁 对于Full GC较多的情况,其主要有如下两个特征: * 线上多个线程的CPU都超过了100%,通过jstack命令可以看到这些线程主要是垃圾回收线程 * 通过jstat命令监控GC情况,可以看到Full GC次数非常多,并且次数在不断增加 #### Full GC原因 1. JVM参数设置问题; 2. 代码中显示调用了System.gc(); 3. 内存溢出或内存泄漏; ### 常见原因 1. 大对象:系统一次性加载了过多数据到内存中(比如SQL查询未做分页),导致大对象进入了老年代; 2. 内存泄漏:频繁创建了大量对象,但是无法被回收(比如IO对象使用完后未调用close方法释放资源),先引发FGC,最后导致OOM 3. 程序频繁生成一些长生命周期的对象,当这些对象的存活年龄超过分代年龄时便会进入老年代,最后引发FGC 4. 程序BUG导致动态生成了很多新类,使得 Metaspace 不断被占用,先引发FGC,最后导致OOM 5. 代码中显式调用了gc方法,包括自己的代码甚至框架中的代码;此时可能是显示的System.gc()调用导致GC次数过多,这可以通过添加-XX:+DisableExplicitGC来禁用JVM对显示GC的响应 6. JVM参数设置问题:包括总内存大小、新生代和老年代的大小、Eden区和S区的大小、元空间大小、垃圾回收算法等等