java虚拟机性能监控与故障处理实践

java虚拟机性能监控与故障处理实践

联系作者: zhangwenhao3@sina.com
请保留文章出处:http://www.cnblogs.com/zhangwenhao/p/3747837.html

jps命令

jps命令类似linux的ps命令,可以列出当前的系统中的所有虚拟内存。同时也可以显示线程的执行类。命令格式
jps [选项] [主机id(使用rmi的时候填写)]
选项如下:

-q:只输出id,不输出类名。

-m:输出传递给main()方法的参数。

-l:输出执行类的类名,或者执行jar包路径。

-v:虚拟机进程启动时候的启动参数。

本文来源于博客园,原始链接

jstat命令

用于间监控虚拟机各种运行状态的命令。比如类装载、内存、垃圾收集和JIT编译等运行状态。用于查找虚拟机性能的工具。
命令格式:
jstat [选项 VMID [interval[s|ms] [count]]]
VMID参数在本机调试的时候,这个id就是jps命令出来的id.
如果是远程rmi的虚拟机进程,格式是[protocol:][//]lvmid(远程id)[@hostname[:port]/servername]
inerval和count分别表示多久查询一次,和查询总的次数。
选项如下:

-class:类装载、卸载数量、总空间和类装载的耗时。

-gc:监视java堆状况。包含Eden区、2个survivor区、老年代、永久呆的容量、已用空寂和GC时间统计。

-gccapacity:监视java堆状况。包含各个对的使用的最大和最小空间。

-gcutil:监视java堆状况。显示已使用和总空间的百分比。

-gccause:输出-gcutil。同时输出上一次gc产生的原因。

-gcnew:监视新生代堆的gc情况。

-gcnewcapacity:输出新生代使用的最大和最小空间。

-gcold:监视老年代堆的gc情况。

-gcoldcapacity:输出老年代使用的最大和最小空间。

-gcpermcapacity:输出永久代使用的最大和最小空间。

-compiler:输出JIT编译过的方法和耗时。

-printcompilation:输出已经被JIT编译过的方法。

jinfo命令

jinfo用于查看和调整虚拟机的各项参数。 命令格式:
jinfo [选项] [pid]
选项如下:

-flag:查询虚拟机参数。

-sysprops:打印系统参数。

-flag [+|-]name 或 -flag name=value:修改运行期间可以修改的虚拟机参数。

jmap命令

用于生产堆转储快照(dump文件),同时可以查询空间使用率等详细信息。有的选手win下不起作用。
命令格式:
jinfo [选项] vmid
选项如下:

-dump:生产快照。格式是:-dump:[live,]format=b,file=<filename>,其中live查杀用于说明是否指dump出存活的参数。

-heap:显示堆详细信息。win下面不能使用这个命令。

-histo:显示对象统计信息,包括类、实例数量和合集容量。

-F:强制生成快照。

-finalizerinfo: -permstat:

jhat命令

用于http方式分析dump。一般不用这个,有很多其他的分析工具。执行这个命令后,在浏览器输入http://localhost:7000/就可以查看。 命令格式:
jhat dump文件的路径

jstack命令

jstack命令用于生成当前虚拟机时空的线程快照,包含当前虚拟机每一条线程正在执行的方法堆栈的集合。 可以用于定位线程出现挺短的原因,比如死锁、死循环、请求外部资源等待时间过长等。 命令格式:
jstack [选项] vmid
选项包含:

-F:强制输出线程堆栈。

-l:除堆栈外,显示关于锁的附件信息。

-m:如果调用了本地方法的话,可以显示c/c++的堆栈。

列表名称说明(来源于互联网,作为参考)

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT: 持有次数限制
MTT : 最大持有次数限制

javap命令

javap命令可以用来分析.class文件。 命令格式:
javap [选项] 类名(可以不带后缀,带后缀不知道能不能执行)
选项包含:

-verbose:输出字节码内容。

笔者也是边学边写代码,边更新这个博客的,很多没注意到到的地方,请大家多指教。
未完,更新中。2014年5月29日
原文地址:https://www.cnblogs.com/zhangwenhao/p/3755487.html