深入JVM虚拟机(五)性能监控工具
1 Java自带监控工具
从Oracle官方网址下地JDK,进行安装。安装完成后,进行${JAVA_HOME}/bin目录下,是JAVA自带的一些监控自带的一些小工具,如下如所示:
1.1 jps虚拟机进程状况工具
JPS(Java Virtual Machine Process Status Tool) 显示当前系统的java进程情况。
用法:jps [ options ] [ hostid ]
选项 | 作用 |
-q | 只输出 LVMID,省略主类的名称 |
-m | 输出虚拟机启动时候传递给 main方法的参数 |
-l | 输出类的全名 |
-v | 输出虚拟机进程启动时 JVM参数 |
[root@localhost ~]# jps -l
17872 org.apache.catalina.startup.Bootstrap
21167 sun.tools.jps.Jps
[root@localhost ~]# jps -v 17872 Bootstrap-Djava.util.logging.config.file=/usr/local/tomcat/test_web/conf/logging.properties-Djava.util.logging.
manager=org.apache.juli.ClassLoaderLogManager -Xms1024m-Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m-Djava.endorsed.dirs=
/usr/local/tomcat/test_web/endorsed-Dcatalina.base=/usr/local/tomcat/test_web -Dcatalina.home=/usr/local/tomcat/test_web-Djava.io.tmpdir=
/usr/local/tomcat/test_web/temp
21181 Jps-Denv.class.path=/usr/local/jdk1.7.0_75/lib/dt.jar:/usr/local/jdk1.7.0_75/lib/tools.jar-Dapplication.home=/usr/local/jdk1.7.0_75 -Xms8m
1.2 jinfo查看 java配置信息工具
jinfo可观察运行中java程序的运行环境参数,参数包括Java System属性和JVM命令行参数;也可从core文件里面知道崩溃的Java应用程序的配置信息。
用法:jinfo [ options ] pid
选项 | 作用 |
-flag <name> | 打印指定的JVM的参数值 |
-flag [+|-]<name> | 设置指定的JVM参数的参数值 |
-flag <name>=<value> | 指定JVM参数值 |
-flags | 打印JVM的标识 |
-sysprops | sysprops打印java系统配置信息 |
<no option> | 选择不打印的以上选项 |
-h | -help | 打印帮助 |
示例:
[root@localhost ~]# jinfo 17872
Attaching to process ID 17872, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.75-b04
Java System Properties:
........(此处省略部分信息)
VM Flags:
-Djava.util.logging.config.file=/usr/local/tomcat/test_web/conf/logging.properties-Djava.util.logging.manager=org.apache.juli.
ClassLoaderLogManager -Xms1024m-Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m -Djava.endorsed.dirs=
/usr/local/tomcat/test_web/endorsed-Dcatalina.base=/usr/local/tomcat/test_web-Dcatalina.home=/usr/local/tomcat/test_web-Djava.io.tmpdir=
/usr/local/tomcat/test_web/temp
示例:
显示了新生代对象晋升到老年代对象的最大年龄
[root@localhost ~]# jinfo -flagMaxTenuringThreshold 17872
-XX:MaxTenuringThreshold=15
显示是否打印GC详细
jinfo -flag PrintGCDetails 17872
-XX:-PrintGCDetails
运行时修改参数,控制是否输出GC日志
jinfo -flag PrintGCDetails 17872
-XX:-PrintGCDetails
jinfo -flag +PrintGCDetails 17872
jinfo -flag PrintGCDetails 17872
-XX:+PrintGCDetails
1.1 生成对象的统计信息
并行生成Java应用程序的堆快照和对象的统计信息。
用法:jmap[options ] pid
选项 | 作用 |
-dump:[live,]format=b, | 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件 |
file=<filename> |
|
-finalizerinfo | 打印正等候回收的对象的信息 |
-heap | 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况 |
-histo[:live] | 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”.如果live子参数加上后,只统计活的对象数量 |
-permstat | 打印classload和jvm heap长久层的信息.包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量.另外,内部String的数量和占用内存数也会打印出来 |
-F | 强迫.在pid没有相应的时候使用-dump或者-histo参数.在这个模式下,live子参数无 |
-J | 传递参数给jmap启动的jvm |
示例:
[root@localhost ~]# jmap -histo 17872
num #instances #bytes classname
----------------------------------------------
1: 80266 47540464 [B
2: 277394 31205336 [C
3: 142715 20713744 <constMethodKlass>
........(此处省略部分信息)
5638: 1 16 org.apache.catalina.valves.AccessLogValve$LogicalUserNameElement
5639: 1 16 sun.reflect.GeneratedMethodAccessor102
Total 2055739 215602480
1.2 生成dump堆对象文件
jmap除了生成应用程序使用的对象信息外,还可以hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件。
示例:
[root@localhost ~]# jmap -dump:format=b,file=/home/heap.hprof17872
Dumping heap to /home/heap.hprof ...
Heap dump file created
将文件从/home/heap.hprof下载到本地,在eclipse安装插件MAT插件,
插件地址:http://archive.eclipse.org/mat/1.2/update-site/,
使用插件打开,即可看到堆信息,如下图:
1.3 jstack分析java线程dump
jstack分析java和native的帧信息。
用法:jstack[options ] [ hostid ]
选项 | 作用 |
-l | 打印锁信息 |
-m | 打印java和native的帧信息 |
-F | 强制dump,当jstack没有响应时使用 |
-h | -help | 打印帮助 |
示例:
[root@localhost home]# jstack 17872
2016-05-23 16:43:22
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.75-b04mixed mode):
"Attach Listener" daemon prio=10 tid=0x00007f36340e7800nid=0x5557 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
........(此处省略部分信息)
"GC task thread#3 (ParallelGC)" prio=10tid=0x00007f3668024000 nid=0x45d5 runnable
"VM Periodic Task Thread" prio=10 tid=0x00007f36680aa000nid=0x45dd waiting on condition
JNI global references: 393
1.4 JConsole图形化监控工具
1、JConsole的图形用户界面是一个符合java管理扩展(JMX)规范的监测工具,JConsole使用java虚拟机(java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息。
从${JAVA_HOME}/bin目录下,打开jconsole.exe
2、概要界面,主要显示堆内存使用情况、活动线程数、加载类数、CPU使用率四个参数的概要,可以通过下拉框来定制显示的时间范围
假如堆内存的图像一直在上升而没有下降的动作发生,则要怀疑是否内存泄露;健壮的项目由于GC的存在,所以它的上升和下降的幅度应该大抵相同;
CPU的图像规律跟堆内存的大致相同。
3、其它功能模块
更多内容,后继续更新…
1.5 VisualVM图形化监控工具
VisualVM是一款免费的\集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU分析,同时它还支持在 MBeans上进行浏览和操作。
1、查看项目运行总览
2、监控了解项目运行的概况
3、内存gc的详细情况
4、其它功能模块
更多内容,后继续更新…
——厚积薄发(yuanxw)