JVM(六)监控工具

监控工具:一般问题定位,性能调优都会使用到。

 (一)、jps

 Jps是参照Unix系统的取名规则命名的,而他的功能和ps的功能类似,可以列举正在运行的饿虚拟机进程并显示虚拟机执行的主类以及这些进程的唯一ID(LVMID,对应本机来说和PID相同),他的用法如下:

Jps [option] [hostid]

jps -q 只输出LVMID

jps -m 输出JVM启动时传给主类的方法

jps -l 输出主类的全名,如果是Jar则输出jar的路径

jps -v 输出JVM的启动参数

 (二)、jstat 

 jstat主要用于监控虚拟机的各种运行状态信息,如类的装载、内存、垃圾回收、JIT编译器等,在没有GUI的服务器上,这款工具是首选的一款监控工具。其用法如下:

jstat [option vmid [interval [s|ms] [vount] ] ]

jstat 监控内容 线程好 刷新时间间隔 次数

     

jstat –gc 20445 1 20    :监视Java堆,包含eden、2个survivor区、old区和永久带区域的容量、已用空间、GC时间合计等信息

jstat –gcutil 20445 1 20:监视内容与-gc相同,但输出主要关注已使用空间占总空间的百分比

jstat –class 20445 1 20:监视类的装载、卸载数量以及类的装载总空间和耗费时间等

.......-gccapcity......:监视内容与-gc相同,但输出主要关注Java区域用到的最大和最小空间

.......-gccause........:与-gcutil输出信息相同,额外输出导致上次GC产生的原因

.......-gcnew..........:监控新生代的GC情况

.......-gcnewcapacity..:与-gcnew监控信息相同,输出主要关注使用到的最大和最小空间

.......-gcold..........:监控老生代的GC情况

.......-gcoldcapacity..:与-gcold监控信息相同,输出主要关注使用到的最大和最小空间

.......-gcpermcapacity.:输出永久带用到的最大和最小空间

.......-compiler.......:输出JIT编译器编译过的方法、耗时信息

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

 (三)、jinfo

 jinfo的作用是实时查看虚拟机的各项参数信息jps –v可以查看虚拟机在启动时被显式指定的参数信息,但是如果你想知道默认的一些参数信息呢?除了去查询对应的资料以外,jinfo就显得很重要了。jinfo的用法如下:

 Jinfo [option] pid

 (四)、jmap

 map用于生成堆快照(heapdump)。当然我们有很多方法可以取到对应的dump信息,如我们通过JVM启动时加入启动参数 –XX:HeapDumpOnOutOfMemoryError参数,可以让JVM在出现内存溢出错误的时候自动生成dump文件,亦可以通过-XX:HeapDumpOnCtrlBreak参数,在运行时使用ctrl+break按键生成dump文件,当然我们也可以使用kill -3 pid的方式去恐吓JVM生成dump文件。Jmap的作用不仅仅是为了获取dump文件,还可以用于查询finalize执行队列、Java堆和永久带的详细信息,如空间使用率、垃圾回收器等。其运行格式如下:

 Jmap [option] vmip

 监控堆栈信息主要用来定位问题的原因,生成堆栈快照

 .......-dump......:生成对应的dump信息,用法为-dump:[live,]format=b,file={fileName}

 .......-finalizerinfo......:显示在F-Queue中等待的Finalizer方法的对象(只在linux下生效)

 .......-heap......:显示堆的详细信息、垃圾回收器信息、参数配置、分代详情等

 .......-histo......:显示堆栈中的对象的统计信息,包含类、实例数量和合计容量

 .......-permstat......:以ClassLoder为统计口径显示永久带的内存状态

 .......-F......:虚拟机对-dump无响应时可使用这个选项强制生成dump快照

 例子:jmap -dump:format=b,file=yhj.dump 20445

 (五)、jstack

 Jstack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。通过jstack我们就可以知道哪些进程在后台做些什么?在等待什么资源等!其运行格式如下:

 Jstack [option] vmid

 -F 当正常输出的请求不响应时强制输出线程堆栈

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

 -m 显示native方法的堆栈信息

 (六)、jconsole

 在JDK的bin目录下,监控内存,thread,堆栈等

 (七)、jprofile

 类似于jconsole,比jconsole监控信息更全面,内存,线程,包,cup 类,堆栈,等等 

猜你喜欢

转载自caizhaohua.iteye.com/blog/2383417
今日推荐