深入JVM虚拟机(五) 性能监控工具

 

深入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二进制形式,输出jvmheap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件

file=<filename>

 

-finalizerinfo

打印正等候回收的对象的信息

-heap

打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况

-histo[:live]

打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*.如果live子参数加上后,只统计活的对象数量

-permstat

打印classloadjvm 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二进制形式,输出jvmheap内容到文件=. 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分析javanative的帧信息。

用法:jstack[options ] [ hostid ]

选项

作用

-l

打印锁信息

-m

打印javanative的帧信息

-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、其它功能模块

更多内容,后继续更新

 


                --以上为《深入JVM虚拟机(五) 性能监控工具》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值