背景
线上Flink频繁重启,先后排查了很多情况,目前在内存阶段排查,首先说说学到的知识
内存泄漏分析
JVM常用命令
JConsole
JVisualvm
快照的这里是最有用的,它和jmap不同,jmap查找的是占用字节最多的类,而这个查找的占用字节最多的对象
换句话说
Test是由String和byte[]组成的,我生成了很多个Test,jmap认为增加的是String和byte[],所以jmap后[C排第一,String排第二。而dump解析后,认为TestController很大,里面的ArrayList很大,这才是找到了问题的根源所在
到了最后,除了JProfile,还是没找到很合适的线上排查内存的方法,只能靠生成快照了
JProfile
实时分析,可分析泄漏源头,收费,公司不让用