问题
在用JanusGraph做OLAP分析的项目中,我发现Spark的executor节点出现大量GC,每个executor的GC开销都在task运行时间的10%以上。用JVM async profiler查看后发现,大概40%~50%的CPU时间都花在GC上。尝试G1GC后,现象依旧没有任何改观。
分析
只好老老实实做heap dump,但是一直苦于heap dump的结果太大,无法分析。最后从同事那里得知,可以用Memory Analyzer Tool (mat)的脚本去做分析,当然前提也要运行mat的机器有足够的内存,分析的结果是html,可以方便查看。
打heap dump有专门的命令:
jmap -dump:live,format=b,file=<heap_dump_file> <JVMPID>
分析heap dump用