java自带工具_Java常用自带工具介绍

jps

jinfo

jmap

jstack

JConsole

Visual VM

一、jps

jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。

jps存放在JAVA_HOME/bin/jps,使用时为了方便请将JAVA_HOME/bin/加入到Path。

基本使用方式:

e6bbf3d06494fd945dc4472d9221b690.png

不过,jps命令有个地方很不好,似乎只能显示当前用户的java进程,要显示其他用户的还是只能用unix/linux的ps命令。

参数使用

-q

只显示pid,不显示class名称,jar文件名和传递给main方法的参数

08ca75a5a0c3fdf63146953ae3e5e1ac.png

-m

输出传递给main方法的参数,在嵌入式jvm上可能是null

dc7b6c05923f530dcf0255a69281daf7.png

-l

输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名

1a2e22538aebcf8ae58b278c28b1652b.png

-v

输出传递给JVM的参数

f1b0a937e1504a566ee39c54841c3934.png

二、jinfo

jinfo可以输出并修改运行时的java进程的JVM参数。用处比较简单,用于输出JAVA系统参数及命令行参数。用法是jinfo -opt  pid

另外,jinfo可能在未来的jvm中移除

7813c2535177b3d376406bc74188244d.png

-flag name

-flag  打印该Java进程的指定的JVM参数的值

如:查看13092的MaxPerm大小可以用

978e8f3fa38d37b4f09f5cd9d046cc5d.png

-flag [+|-]name

-flag[+|-]  控制生效或不生效某些JVM参数

如生效PrintGCDetails参数

65d8ac45d13aa4278ba9044f368df88c.png

-flag name=value

-flag=  设定名为name的参数为指定值

如果出现下面这样的情况,说明参数不支持修改

47e1ef72ed0fae30b0fc78f2a0560d0c.png

-flags

查看进程的所有JVM参数

93c26118a86246746a06cc232ff8edfe.png

三、jmap

打印出某个Java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

使用方法:

jmap [ option ] pid

jmap [ option ] executable core

jmap [ option ] [server-id@]remote-hostname-or-IP

f9f1e2a36b75f4d7a700ab57988da2c2.png

参数

-histo

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

2a971c89a7232c525c58c37981a8832d.png

-dump:[live,]format=b,file=filename

使用hprof二进制形式,输出jvm的heap内容到文件。live子选项是可选的,假如指定live选项,那么只输出活的对象到文件。

aceaf3818872ffa5eeb8a742e9d6f901.png

-finalizerinfo

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

86b552bfb7368a0f78c832b4f7bc0067.png

-heap

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

7aa70fab4913af3b9b95608fa04e656e.png

-permstat

打印classload和jvm heap长久层的信息。包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量。另外,内部String的数量和占用内存数也会打印出来。

bf109197d57d0a65c0374a3860f7ef3d.png

-J

传递参数给jmap启动的jvm。

-F

强迫。在pid没有相应的时候使用-dump或者-histo参数。在这个模式下,live子参数无效。

四、jstack

jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项”-J-d64″,Windows的jstack使用方式只支持以下的这种方式:

jstack [-l] pid

使用方法:

jstack [-l]

jstack -F [-m] [-l]

jstack [-m] [-l]

jstack [-m] [-l] [server_id@]

9c37a40d2828bde112b9128d28a841ae.png

参数

-F

当’jstack [-l] pid’没有相应的时候强制打印栈信息

-l

长列表。打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表。

e8c5ba57ff14d0c9db2f0b9b7e8101f6.png

-m

打印java和native c/c++框架的所有栈信息。

26a065216b0b1518447c9d76b437f71a.png

五、JConsole

JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote。例如,启动一个可以在本地监控的J2SE的应用Java2Demo ,需输入以下命令:

Shell

JDK_HOME/bin/java -Dcom.sun.management.jmxremote -jar JDK_HOME/demo/jfc/Java2D/Java2Demo.jar

1

2

JDK_HOME/bin/java-Dcom.sun.management.jmxremote-jarJDK_HOME/demo/jfc/Java2D/Java2Demo.jar

概述界面:

85b17c966e780d81a79d51ca84d7840c.png

内存界面:

e40844e460f34c8c6a6f546b9cdbaed8.png

线程界面:

4223f368dd90220cf50bb539f0d05696.png

类界面:

e945eaf7c3a8108df27e7d44e4e1345a.png

VM摘要界面:

8da3c1a448676592683a165fef161ab1.png

MBean界面:

77ab3a9916d014f3cea6888445b45ba0.png

远程监控

启动程序时加控制台参数:

Shell

-Dcom.sun.management.jmxremote.port=9112 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

1

2

-Dcom.sun.management.jmxremote.port=9112-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false

注意参数-Dcom.sun.management.jmxremote.port=9112表示监控的端口

启动程序后,使用jdk路径下的bin下的jconsole.exe工具

21bee9cabe2d4c11802685a3f030a45b.png

点击链接后就可以远程监控Java进程的运行状态了:

413ebc9cae36c5aefb878d4e5ca048e3.png

六、Visual VM

VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。

87b70e9c6b5a0ee40ffad5b0a6162f01.png

安装插件