Java学习笔记20-JVM内置命令工具
JDK内置工具 - javap
java反编译工具,主要用于根据 Java字节码文件反汇编为 Java源代码文件。
javap <options> <classes>
命令 | 描述 |
---|---|
javap -help --help -? | 输出此用法消息 |
javap -version | 版本信息 |
javap -v -verbose | 输出附加信息 |
javap -l | 输出行号和本地变量表 |
javap -public | 仅显示公共类和成员 |
javap -protected | 显示受保护的/公共类和成员 |
javap -package | 显示程序包/受保护的/公共类和成员 (默认) |
javap -p -private | 显示所有类和成员 |
javap -c | 对代码进行反汇编 |
javap -s | 输出内部类型签名 |
javap -sysinfo | 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列) |
javap -constants | 显示静态最终常量 |
javap -classpath <path> | 指定查找用户类文件的位置 |
javap -bootclasspath <path> | 覆盖引导类文件的位置 |
JDK内置工具 - jps
jps(Java Virtual Machine Process Status Tool)显示当前所有 java进程 pid的命令
jps <options> <hostid>
命令 | 描述 |
---|---|
jps -q | 仅输出VM标识符,不包括classname,jar,name,arguments in main method |
jps -m | 输出main method的参数 |
jps -l | 输出完全的包名,应用主类名,jar的完全路径名 |
jps -v | 输出 jvm参数 |
jps -V | 输出通过flag文件传递到 JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件) |
jps -Joption | 传递参数到vm,例如:-J-Xms512m |
JDK内置工具 - jstat
jstat监视Java虚拟机(JVM)统计信息
用法:jstat [ generalOption | outputOptions vmid [ interval [ s | ms ] [ count ]]]
-t参数:可以在输出信息前面加上一个Timestamp列,显示程序运行的时间。
-h参数:可以在周期性的数据输出时,输出多少行数据后,跟着输出一个表头信息。
interval:指定输出统计周期,count:指定输出多少次数据。
命令 | 描述 |
---|---|
jstat -gc pid | 显示gc的信息,查看gc的次数及时间 |
jstat -gccapacity pid | 内存GC分区中各对象的使用和占用大小 |
jstat -gcutil pid | 统计gc信息统计 |
jstat -gcnew pid | 新生代对象的信息 |
jstat -gcnewcapacity pid | 新生代对象的信息及其占用量 |
jstat -gcold pid old | 老年代对象的信息 |
jstat -gcoldcapacity pid old | 老年代对象的信息及其占用量 |
jstat -gcpermcapacity pid perm | 永久代对象的信息及其占用量 |
jstat -class pid | 显示加载class的数量及所占空间等信息 |
jstat -compiler pid | 显示VM实时编译的数量等信息 |
jstat -printcompilation pid | 当前VM执行的信息 |
JDK内置工具 - jcmd
jcmd工具,可以替代 jps工具查看本地的 jvm信息
jcmd -l
jcmd <pid | main class> <command …|PerfCounter.print|-f file>
命令 | 描述 |
---|---|
jcmd | 查看本地的 java进程列表,获取其pid |
jcmd pid help | 查看其支持的命令列表 |
jcmd pid Thread.print -l | 打印线程栈 |
jcmd pid VM.command_line | 打印启动命令及参数 |
jcmd pid GC.heap_dump /data/filename.dump | 查看 JVM的Heap Dump |
jcmd pid GC.class_histogram | 查看类的统计信息 |
jcmd pid VM.system_properties | 查看系统属性内容 |
jcmd pid VM.uptime | 查看虚拟机启动时间 |
jcmd pid PerfCounter.print | 查看性能统计 |
JDK内置工具 - jinfo
jinfo可以查看运行中 jvm的全部参数,还可以设置部分参数。
jinfo [option] pid
jinfo [option] executable core
jinfo [option] [server_id@] remote server IP or hostname
命令 | 描述 |
---|---|
pid | 对应 jvm的进程 id |
executable core | 产生 core dump 文件 |
[server_id@] remote server IP or hostname | 远程的 ip或者 hostname,server IP标记服务的唯一性 id |
命令 | 描述 |
---|---|
no option | 输出全部的参数和系统属性 |
-flag name | 输出对应名称的参数 |
-flag [+|-]name | 开启或者关闭对应名称的参数 |
-flag name=value | 设定对应名称的参数 |
-flags | 输出全部的参数 |
-sysprops | 输出系统属性 |
JDK内置工具 - jhat
Java Head Analyse Tool 分析 java堆的命令,可以将堆中的对象以html的形式显示出来,支持对象查询语言OQL
jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>
命令 | 描述 |
---|---|
-J<flag> | 启动 JVM时传入启动参数(例如:-J-Xms512m则指定运行 jhat的 Java虚拟机使用的最大堆内存为512MB) |
-stack false|true | 关闭对象分配调用栈跟踪(tracking object allocation call stack)。默认值为true |
-refs false|true | 关闭对象引用跟踪(tracking of references to objects)。默认值为true |
-port <port> | 设置jhat HTTP server 的端口号;默认值7000 |
-exclude <file> | 指定文件对象查询时需要排除的数据成员列表(例如:如果文件列出了 java.lang.String.value,那么当从某个特定对象Object o计算可达的对象列表时,引用路径涉及 java.lang.String.value的都会被排除。) |
-baseline <file> | 指定一个基准堆转储在两个 heap dumps中有相同object ID的对象会被标记为不是新的(marked as not being new),其他对象被标记为新的(new),在比较两个不同的堆转储时很有用。 |
-debug <int> | 设置debug级别。0表示不输出调试信息;值越大则表示输出更详细的debug信息 |
-version | 启动后只显示版本信息就退出 |
JDK内置工具 - jmap
打印出 java进程内存中Object的情况。或者将VM中的堆,以二进制输出成文本。
jmap [option] pid (to connect to running process)
jmap [option] executable core (to connect to a core file)
jmap [option] [server_id@] remote server IP or hostname (to connect to remote debug server)
命令 | 描述 |
---|---|
<no option> | 无参,会打印目标 JVM加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径 |
-dump:[live,]fromat=b,file=<filename> | 使用hprof二进制输出heap内容到文件,live代表只输出存活对象 |
-finalizerinfo | 打印正等候回收的对象的信息 |
-heap | 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况 |
-histo[:live] | 打印每个class内存信息,VM的内部类会加上前缀“*”,live代表只输出存活对象 |
-clstats | 打印classload和 jvm heap方法区的信息,每个classloader的名字,活泼性,地址,父classloader和加载的class数量。(另外内部String的数量和占用内存数也会打印出来) |
-F | 强迫。在pid没有响应的时候使用-dump或者-histo参数;在这个模式下,live子参数无效 |
-h | -help | 打印辅助信息 |
-J<flag> | 传递参数给 jmap启动的 jvm |
JDK内置工具 - jstack
堆栈跟踪工具。jstack用于打印出给定的 java进程ID或core file或远程调试服务的 Java堆栈信息,如果是在64位机器上,需要指定选项“-J-d64”
jstack [option] pid
jstack [option] executable core
jstack [option] [server_id@] remote server IP or hostname
命令 | 描述 |
---|---|
core | 将被打印信息的core dump文件 |
remote server IP or hostname | 远程debug服务的主机名或ip |
server_id | 唯一id,假如一台主机上多个远程debug服务 |
命令 | 描述 |
---|---|
-F | 强制打印栈信息 |
-l | 长列表;打印关于锁的附加信息 |
-m | 打印 java和native c/c++框架的所有栈信息 |
-h | -help | 打印帮助信息 |
JDK内置工具 - jconsole
可视化工具,测试时或者性能调试时使用
JDK内置工具 - jvisualVM
可视化工具,可以看GC、内存、堆栈等信息