JDK 命令行工具 实现在tools.jar文件

 1 jps :jps 命令类似于Linux下的ps,但其只用于列出java的进程。
          参数 -q 指定jps只输出进程ID
         参数 -m 用于输出传递给java进程(主函数)的参数
          参数 -l 用于输出主函数的完整路径  
           参数 -v 可以显示传递给jvm的参数
       通过jps 可以方便的查看Java 进程的启动类、传入参数和jvm参数 等信息。

 2 jstat :jstat 是一个可以用于观察Java应用程序运行时信息的工具。她的功能非常 强 大,可以通过它 查看堆信息的详细情况。基本语法:

   jstat -<option> [-t] [-h<lines>] <vmid> [<interval>] [<count>]

   选项option 可以由一下值构成:
    -class 显示classLoader 的相关信息
    -compiler 显示JIT编译的相关信息
    -GC 显示与GC相关的堆信息
    -gccapacity 显示各个代的容量以及使用情况。
    -gccause 显示垃圾手机相关的信息。
    -gcnew 显示新生代信息
    -gcnewcapacity 显示新生代大小与使用情况。
    -gcold 显示老年代和永久代的信息
    -gcoldcapacity 显示老年代的大小
    -gcpermcapacity 显示永久代的大小
    -gcutil 显示垃圾收集信息(同-gccause)
   -printcompilation 输出JIT编译的方法信息

   -t 参数可以在输出信息钱加上一个 timestamp 列 显示程序的运行时间。
   -h 参数可以在周清醒数据输出时,输出多少行数据后,跟着输出一个表头信息。
   interval 参数用于输出指定输出统计数据的周期 单位为毫秒。
   count 用于指定一共输出多少次数据。


  Fxm: jstat -class -t 2972 1000 2 
 jstat 可以非常详细的查看java应用程序的堆使用情况以及GC情况。


  3 jinfo :jinfo 可以用来查看正在运行的java应用程序的扩展参数,甚至支持在运行时修改部分参数,她的基本语法为 
     jinfo <option> <pid>
  其中 option 可以为以下信息:
  -flag <name> 打印指定jvm的参数值
  -flag [+|-]<name>:设置指定jvm参数的布尔值。
  -flag <name>=<value> 设置指定jvm参数的值。
  很多情况下 java程序不会指定所有的jvm参数,此时,开发人员可能不知道某一个具体的jvm参数的默认值,如果通过参考手册去查找 这个过程是非常艰难的,使用jinfo 开发人员可以很方便的找到jvm参数的当前值。
  jinfo不仅可以查看运行时某一个jvm参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。


 4 jmap :jmap 可以生成java 应用程序的堆快照和对象的统计信息。
   下例使用jmap 生成PID 为2972的Java 程序的对象统计信息,并且输出到s.txt文件中
   jmap -histo 2972 >c:\s.txt


 5 jhat 使用jhat 工具可以用于分析java 应用程序的堆快照内容。
  jhat c:\heap.hprof

 6 jstack :jstack 可用于导出java 应用程序的线程堆栈,其语法为
    jstack [-l] <pid>
   -l 可用于打印锁的附加信息。
  jstack 工具会在控制台输出程序中所有的锁信息,可以使用重定向讲输出保存到文件,
  Fxm: 
       jstack -l 2348 >c:\deadlock.txt

 通过jstack 不仅可以得到线程堆栈,她还能自动进行死锁检查,输出找到的死锁信息。


 7 jstatd :  jdk 命令中 也存在支持对元和曾计算机的监控 例如 jps jstat ,为了启用远程监控,则需要配合使用jstat工具。
   jstatd 是一个RMI服务端程序,她的作用相当于代理服务器,简历本地就三级远程监控工具的通信。jstatd 服务器讲本机的java应用程序信息传递到远程计算机上。

   由于jstatd 程序没有足够的权限,会抛出异常,这里可以使用java的安全策略,为其分配相应的权限 暂时将其保存在jstatd.all.policy文件。
   grant codebase "file:E:/tools/jdk1.6.0.21/lib/tools.jar" {
   permission java.security.AllPermission;
};

  然后 使用以下命令再次开启jstatd服务器。
  jstatd -J-D java.security.policy = c:\jstatd.all.policy
  -J参数是一个公共参数,可以为 jps等命令本身设置jvm参数。

 8 hprof 工具
     与前文中介绍的监控工具不同,hprof不是独立的监控工具,他只是一个java agent 工具,它可以用于监控java应用程序在运行时的cpu信息和堆信息。使用java-agentlib:hprof=help 可以查看 hprof的帮助文档。

 9 jconsole 命令:
      jconsole 可以查看应用程序的运行情况,监控堆信息、永久区使用情况、类加载情况等。