在上一篇文章《JVM实战优化篇》中,梳理了JVM内存的核心参数,同时对新业务系统上线如何预估容量、垃圾回收器如何选择进行了总结,最后文末还给大家总结了一套通用的JVM参数模板。JVM的调优基本都发生在上线前,尽量争取在压测环节就可以把JVM参数调整到最优,最有效的优化手段是架构和代码层面的优化,如果上线以后发生了JVM故障,最常见的比如频繁FullGC、OOM等场景,就需要善用工具去分析并解决线上问题了。
一、JVM命令
1.jps,虚拟机进程状况
./jsp
直接输出各个JVM进程的PID。
2.jstat,虚拟机统计信息监视工具
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。主要常用这个查看堆的使用情况:
jstat -gc pid
pid是VM的进程号,即当前运行的java进程号,后面还可以加几个参数。
•interval:执行的间隔时间,单位为毫秒•count :打印次数,如果缺省则一直打印
上面的缩写解释: E-eden, S-suviror, M-metaspace, C-capacity, U-used
前面均为瞬时统计容量(byte) 以下统计了从应用程序启动到采样时的统计综合 YGC
:年轻代中gc次数 YGCT
:年轻代中gc所用时间(s) FGC
:old代(全gc)gc次数 FGCT
:(全gc)gc所用时间(s) GCT
:gc用的总时间(s)
3.jmap 虚拟机内存映像工具
jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
•堆转储文件:jmap -dump:live,format=b,file=heap-dump.bin•输出所有内存中对象统计,jmap -gc pid,输入的demo如下:
./jmap -heap 5932using thread-local object allocation.Parallel GC with 4 thread(s)Heap Configuration:...Heap Usage:PS Young GenerationEden Space: capacity = 60293120 (57.5MB) used = 44166744 (42.120689392089844MB) free = 16126376 (15.379310607910156MB) 73.25337285580842% usedFrom Sp