最近刚换完工作:在公司需要用到相应的工具进行分析线上代码运行情况。因而做一下记录。

      在开发的过程中,应线上出现的各种问题,我们需要分析代码的相关运行情况,如资源占用情况,线程数量,行日志、异常堆栈、GC日志、快照 文件 等。这个时候,工具往往会给我们带个便捷。工具是知识处理数据的手段。因而我们需要懂的Java自带的相应分析工具。

SunJdk监控和故障处理工具:

名称

作用

jps

JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机的进程

jstat

JVM Statistics Monitoring Tool,用于收集 HotSpot 虚拟机各方面的运行数据

jinfo

Configuration Info for Java ,显示虚拟机配置信息

jmap

Memory Map for Java,生成虚拟机的内存转春快照。

jhat

JVM Heap Dump Browser,用于分析heapdump文件,他会建立一个Http/Html服务器,让用户可以在浏览器上查看分析结果。

jstack

Stack Trace for Java ,显示虚拟机的线程快照

虚拟机监控程序已成功启动_Java

1.Jps:虚拟机进程状态工具。

   jps命令格式: jps [options] [hostid]

jps工具的主要选项:

  • -q: 不输出 类名称、Jar 名称 和传入 main 方法的 参数;
  • -l: 输出 main 类或 Jar 的 全限定名称;
  • -m: 输出传入 main 方法的 参数;
  • -v: 输出传入 JVM 的参数

2. jstat-虚拟机统计信息监控工具

各种 运行状态信息 的命令行工具。它可以显示 本地 或者 远程虚拟机 进程中的 类装载、内存、垃圾收集、jit 编译 等运行数据。 
jps命令格式:

         jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
option 参数含义:

       -t:可以在打印的列加上 timestamp 列,用于显示系统运行的时间。
       -h 可以在 周期性数据 的时候,可以在指定输出多少行以后输出一次 表头 
        vmid:进程ID 
        lines: 表头 与 表头 的间隔行数。 
        interval: 执行每次的 间隔时间,单位为 毫秒 
       count: 用于指定输出记录的 次数,缺省则会一直打印。
option 值的选项 :

选项

作用

-class

监视类装载,卸载数量,总空间以及类装载所耗费的时间

-compiler

输出JIT编译器编译过的方法,耗时等信息

-gc

显示和 gc相关的 堆信息

-gccapacity

监视内容与-gc基本一样,但输出主要管制Java堆各个区域使用到的最大,最小空间

-gcmetacapacity

监视内容与-gcnew基本相同,输出主要关注使用到的最大,最小空间

-gcnew

监视新生GC状况

-gcold

显示 老年代GC状况

-gcoldcapacity

显示 老年代 的大小

-gcutil

监视内容与-gc基本一样,但输出主要关注已使用空间占总空间的百分比

-gccause

与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因

-printcompilation

输出已经被JIT编译的方法。

案例: jstat -gc 5555 250 20 

      每250秒查询一次进程5555垃圾收集状况,一共查询20次。

3.jinfo配置信息查看工具 
          这个命令作用是实时查看和调整 虚拟机运行参数

    jinfo 命令格式 
              jinfo [-options] <pid>

4.jmp 内存映射工具 --查看内存使用的详细信息 

命令格式 
              jmap [-options] <pid> 
选项参数的意思: 
 

选项

作用

-dump

生成Java堆转储快照

-finalizerinfo

显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在linux/Solaris平台下有效。

-heap

显示 Java堆中的详细信息 

-histo

显示对象的统计 消息 

-permstat

以Classcloader为统计口径显示永久代内存状态。只在Linux/Sorlaris平台下有效。

-F

强制生成dump快照

       -heap:
       -histo:
      -clstats:

5.jstack 堆栈跟踪工具 :
             生成 java 虚拟机当前时刻的 线程快照。线程快照 是当前 java 虚拟机内 每一条线程 正在执行的 方法堆栈 的 集合。生成线程快照的主要目的是定位线程出现 长时间停顿 的原因,如 线程间死锁、死循环、请求外部资源 导致的 长时间等待 等等 
命令格式: 
        jstack [-options] <pid> 

options:

 

选项

作用

-F

当正确输出的请求不被响应,强制输出线程堆栈

-I

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

-m

如果调用本地方法的话,可以显示c/c++的堆栈

 6.jhat:虚拟机堆转储快照分析工具。用来分析jmap生成的堆转储快照。