转载自:http://linuxperformance.top/
-
java应用诊断
重要的东西放最前面:
应用代码性能可以通过一些应用层面监控报警,如果确定有问题的功能和代码,直接通过代码就可以定位;或者通过jstack,找出有问题的线程栈,定位到问题线程的代码上,也可以发现问题。
常用的 Java 应用诊断包括线程、堆栈、GC 等方面的诊断。
-
Java内存泄漏
系统崩溃前的一些现象:
每次垃圾回收的时间越来越长,例如由之前的10ms延长到50ms左右,Full GC的时间也有之前的0.5s延长到5s
Full GC的次数越来越多,最频繁时隔不到30秒就进行一次FullGC
年老代的内存越来越大并且每次FullGC后年老代没有内存被释放
最后系统会无法响应新的请求,逐渐到达OutOfMemoryError(OOM)的临界值。
可以通过Java的jmap命令来生成该文件,分析dump文件。
如果出现垃圾回收的时间越来越长。我们可以根据内存模型和垃圾回收算法,垃圾回收中出现了一些回收不掉的内存,增加了复制量,导致时间延长。所以,垃圾回收的时间也可以作为判断内存泄漏的依据。
如果Full GC的次数越来越多,说明耗尽了年老代的内存,导致新对象分配没有更多的空间,从而导致频繁的垃圾回收
如果年老代占用的内存越来越大,说明年轻代的内存可能无法被回收,需要将更多的内存复制到年老代。