`
richard_2010
  • 浏览: 63528 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JDK自带工具的使用

阅读更多

        安装好jdk后,进入JAVA_HOME/bin目录,可以看到该目录下有一些可供我们使用的工具,这些工具在遇到问题的时候可以很好的帮助我们排查。


 

1.jconsole

        jconsole是一个可视化的工具,可以以图形化的方式向你展示java进程的各项数据,比如内存的占用和GC、线程数线程池、类的载入数量以及VM的摘要等,功能强大,如图:


 

        jconsole可以连接远程主机,前提是目标主机进行了相关设置,比如启动参数

            -Dcom.sun.management.jmxremote

            -Dcom.sun.management.jmxremote.port=1099

            -Dcom.sun.management.jmxremote.ssl=false

            -Dcom.sun.management.jmxremote.authenticate=false

表示允许匿名通过1099端口连接该进程获取相关的数据。

 

2.jvisualvm

        jvisualvm可以看作一个加强版的jconsole,除了jconsole提供的一些信息的查看,还可以对cpu内存进行取样分析,也可以dump出堆数据进行分析,另外支持一些其他的插件。


 

 

3.jps(JVM Process Status)

        jps可以查看当前用户java进程的pid(如果想显示其他用户的java进程得用系统的ps命令),基本后面所有的命令都会用到pid。

            $ jps

            17113 Bootstrap

            30207 Bootstrap

            28573 Jps

            27095 jar

        在不加任何参数的情况下显示的是Main方法的文件名,参数 -l 显示具体的包名

            $ jps -l

            17113 org.apache.catalina.startup.Bootstrap

            30362 sun.tools.jps.Jps

            30207 org.apache.catalina.startup.Bootstrap

            27095 slave.jar

        此时如果同时启动两个tomcat(如上)可能还是没办法区分是哪个应用,参数 -v 显示jvm启动时带的参数,参数 -m 显示main方法的启动参数。

 

4.jinfo(JVM Configuration Info)

        jinfo可以查看和设置JVM的参数,这个功能在动态修改JVM的参数场景下比较有用,不用重启应用服务器即可生效,当然如果设置参数值时报错:java.io.IOException: Command failed in target VM,说明该参数不支持修改。

查看比较简单,用法是jinfo -**  pid 

 

5.jmap(JVM Memory Map)

        jmap用来打印java进程内存里面对象的使用情况,jmap -heap pid显示jvm堆的使用摘要,jmap -histo pid打印class的实例数目、内存占用、包含包路径的类名等信息(-histo:live时只统计活的对象

该命令用得最多的是-dump参数,jmap -dump:format=b,file=filepath pid,使用hprof二进制形式dump jvm的堆内容到指定的文件,可用于后续的内存分析排查内存泄露等信息,-dump:live时只导出活的对象。

 

6.jstack(JVM Stack Trace)

        jstack可以打印java进程的堆栈信息,jstack -l pid打印锁的一些附加信息,在排查死锁的时候比较有用。

 

7.jstat(JVM Statistics Monitoring Tool)

        jstat用来对JVM堆的使用情况进行实时的统计,可以监控如下信息:

        类的加载及卸载情况;

        新生代、老生代及持久代的容量、使用情况和垃圾收集情况,并包含垃圾回收的次数及垃圾回收所耗费的时间;

        新生代中s0及s1容量和分配情况。

        jstat -options可以查看它支持的参数,用得比较多的有

            $ jstat -gcutil 29784

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   

  0.00  99.46  76.34  49.36  31.06  30139  846.957   145  447.050 1294.007

         输出分别代表s0使用百分比,s1使用百分比,新生代使用百分比,旧生代使用百分比,永久代使用百分比,自jvm启动后young gc的次数,耗费的时间,full gc的次数,耗费的时间,gc总的耗费时间(单位秒)。

还有-gc和-gccapacity也是较常用的参数。

 

8.jhat(JVM Heap Analyse Tool) 

        jhat用来分析dump出来堆里面的数据,可以将解析的数据以html的方式呈现。如果dump出来的堆很大可以加参数jhat -J-Xmx1024m jmapDumpFile解决堆内存不足的报错。

        当然现在一般可以把dump文件下载到本地,用MAT(Memory Analyzer Tool)这种图形化工具来分析,速度比较快,而且图形化的结果可读性会更强。

  • 大小: 17.3 KB
  • 大小: 72.6 KB
  • 大小: 64.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics