一
系统中创建了大量的线程,这些线程并发运行,而且工作负载都很重,过多的线程同时运行就会导致CPU负载过高
二
JVM频繁的Full GC,非常耗费CPU资源
2.1
频繁Full GC的原因
- 内存分配不合理,导致对象频繁进入老年代,进而引发频繁Full GC
- 存在内存泄漏等问题,就是内存里驻留了大量的对象塞满了老年代,导致稍微有一些对象进入老年代就会引发Full GC
- 永久代里的对象太多,触发了Full GC
- 错误的使用System.gc();
2.2
如果每次full GC之后,老年代依旧有大量内存没有被回收,则可以使用
jmap -dump:live,format=b,file=dump.hprof PID
下载下来使用mat或者visual VM进行分析