虚拟机性能监控与实战

时间:2022-12-26 21:40:29

jps[JVM Process Status Tool]

显示系统内所有Hotspot虚拟机进程
-m:显示虚拟机进程启动时传递给主类main函数的参数
-l:输出主类全名
-v:输出虚拟机进程启动时jvm参数

jstat[JVM Statistics Monitoring Tool]

手机Hotspot虚拟机各方面的运行数据
jstat option vmid(虚拟机进程id) interval(查询间隔s|ms) count(查询次数)
jstat -gc 2764 250 20:每250毫秒查询一次进程2764垃圾收集情况,一共查询20次
jstat -gcutil 2764:基本与gc相同,只不过显示成百分比
s0 s1 e o p YGC YGCT FGC FGCT GCT
survivor0 survivor1 Eden old permanent youngGC youngGCTime FullGC……

jinfo[Configuration Info for Java]

显示虚拟机配置信息 jinfo [option] pid
-v:虚拟机启动时显示指定的参数列表
-flag:指定参数的系统默认值
可以通过它进行运行期间参数调整

jmap[Memory Map for java]

生成虚拟机的内存转储快照【heapdump】,也可以设置-XX:HeapDumpOnOutOfMemoryError,让虚拟机发生OOM异常时自动生成dump文件
jmap [option] vmid
-dump:生成堆转储快照
-heap:显示堆详细信息,如使用哪种收集器、参数设置、分代情况
等等

jhat

用于分析heapdump文件,他会建立一个http服务器,可以通过浏览器分析结果
一般不采用该方式,可以通过VisualVM等专业工具分析

jstack

显示虚拟机的线程快照。可以查看每一条线程正在执行方法栈的集合,目的是定位线程长时间停顿的原因。也可以通过Thread类的getAllStackTraces()方法获取虚拟机中所有线程的StackTraceElement对象,用该方法做个管理页面

实例1

高性能硬件环境下,程序中产生较多大对象,大部分直接进入了老年代,导致Full GC.如果老年代的内存较大,则停顿时间会很长。
解决方法:1、深夜通过定时任务触发full gc;2、降低大对象的存活时间;3、通过建立逻辑集群利用资源;4、使用CMS收集器降低停顿时间

–大部分内容引自《深入理解Java虚拟机》