Jps(:Java Process Status):显示指定系统内所有的Jvm虚拟机进程
语法: jsp -[options] [hostid]
参数 [options]
- -q 只展示本地虚拟机唯一id: jps -q
- -l 输出应用程序主类得全类名或如果执行得是jar包、则输出jar完整路径 jsp -l
- -m 输出虚拟机进程启动时传递给主类main() 的参数 jps -m
- -v 列出虚拟机启动时的JVM参数 jps -v
jstat(JVM Staticstics Monitoring Tool)
查看JVM统计信息,用户监视虚拟机各种运行状态信息的命令工具。它可以显示本地或者远程虚拟机进程的类装载、内存、垃圾收集、JIT编译等运行数据。常用于检测垃圾回收问题以及内存泄露问题。
语法 : jstat -
参数:[options]
- -class 显示classloader的相关信息 jstat -class pid
- -compiler 显示JIT 编译器编译过的方法、耗时信息 jstat -compiler pid
- -princompilation 显示JIT已经编译的方法 jstat -printcompilation pid
- -gc 显示与GC相关的堆信息、包括Eden区等 jstat -gc pid
- -gccapacity x显示与-gc基本相同、输出主要关注各个区域使用到的最大、最小空间 jstat -gccapacity pid
- -gcutil 显示与gc基本相同、但输出主要关注已使用空间占总空间百分比 jstat -gcutil pid
- -gccause 显示与gcutil 功能相同、但会额外输出导致最后一次或者当前正在发生GC的原因 jstat -gccause pid
- -gcnew 显示新生代GC状况 jstat -gcnew pid
- -gcnewcapacity 显示与gcnew 基本相同输出主要关注使用到的最大、最小空间 jstat -gcnewcapacity
- -gcold 显示老年代GC状况 jstat -gcold pid
- -gcoldcapacity 显示与gcold 基本相同、输出主要关注使用到的最大、最小空间 jstat =gcoldcapaciry pid
- gcmetacapacity 显示元空间使用到的最大、最小空间
用于指定输出统计数据的周期、单位为毫秒。即:查询间隔 jstat -class pid 1000 用于指定查询的总次数 jstat -class pid 1000 3 - -t 可以在输出信息上加一个Timestamp列 显示程序运行的时间 单位是:秒 Timestamp 记录从程序开始运行到当前的时间
- -h 可以在周期性数据输出时、输出多少行数据后输出一个表头信息
jinfo(Configuration info for Java) 查看虚拟机配置参数信息、也可用于调整虚拟机的配置参数
基础语法 jinfo [option]
参数 [option]
- -sysprops 输出系统属性、System.getProperties() jinfo -sysprops pid
- -flags 输出全部参数 jinfo -flags pid
- -flag 具体参数 查看某个java进程的具体参数的值 java -flag UseParalleGc pid | java -flag MaxHeapSize pid
- java -XX:+PrintFlagsInitial 查看所有Jvm参数启动的初始值
- java -XX:+PrintFlagsFinal pid 查看所有JVM参数的运行最终值
- java -XX:+PrintCommandLineFlags 查看哪些已经被用户或者JVM设置过的详细的XX参数的名称何值
- java -flag [+|-] 具体参数 pid 用来设置值为boolean 类型的值
- java -flag 具体参数=具体值 pid 用来设置值为非boolean类型的值
jinfo 不仅可以查看运行时某一个Java虚拟机参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效;但是,并不是所有参数都支持动态修改。参数只有被标记为manageable的flag可以被实时修改。其实这个修改能力是极其有限的。 java -XX:+PrintFlagsFinal -version | grep manageable
[root@localhost ~]# java -XX:+PrintFlagsFinal -version | grep manageable
intx CMSAbortablePrecleanWaitMillis = 100 {manageable}intx CMSTriggerInterval = -1 {manageable}intx CMSWaitDuration = 2000 {manageable}bool HeapDumpAfterFullGC = false {manageable}bool HeapDumpBeforeFullGC = false {manageable}bool HeapDumpOnOutOfMemoryError = false {manageable}ccstr HeapDumpPath = {manageable}uintx MaxHeapFreeRatio = 100 {manageable}uintx MinHeapFreeRatio = 0 {manageable}bool PrintClassHistogram = false {manageable}bool PrintClassHistogramAfterFullGC = false {manageable}bool PrintClassHistogramBeforeFullGC = false {manageable}bool PrintConcurrentLocks = false {manageable}bool PrintGC = false {manageable}bool PrintGCDateStamps = false {manageable}bool PrintGCDetails = false {manageable}bool PrintGCID = false {manageable}bool PrintGCTimeStamps = false {manageable}
jmap (JVM Memory Map)
导出内存镜像文件&内存使用情况。一方面是获取dump文件(堆转储快照文件、二进制文件)、还可以获取目标Java进程的内存相关信息、包括Java堆中对象的统计信息、类加载信息等。
基本语法
jmap [option]
jmap [option]
jmap [option] [server_id@]
参数 [option]
-dump 生成Java对转存储快照 dump文件;-dump:live 只保存堆中的存活对象
手动方式 :手动获取当JVM的dump文件 jmap -dump:format=b,file=
jmap -dump:live,format=b,file= 自动方式 :当JVM发生OOM时生成对应的dump文件 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=
-heap 输出整个堆空间的详细信息、包括GC的使用情况、对配置信息、以及内存的使用信息等

- -histo 输出堆中对象的统计信息、包装类、实例数量何合计容量
- -histo:live 只统计堆中的存活对象
finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象-仅在linxu平台有效
[root@localhost file]# jmap -finalizerinfo 31295 Attaching to process ID 31295, please wait… Debugger attached successfully. Server compiler detected. JVM version is 25.161-b12 Number of objects pending for finalization: 0
-F 当虚拟机进程堆-dump 选项没有任何响应时、可使用此选项强制执行dump
- -J
传递参数给jmap 启动的JVM
jhat(JVM Heap Analysis Tool)
是JDK提供的与jmap命令搭配使用,用于分析jmap生成的heap dump文件。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,用户可以在浏览器中查看分析结果(分析虚拟机转储快照信息)。 使用jhat就会启动一个http服务,端口是7000,(jhat命令在JDK9以后已经被删除,官方建议使用VisualVM代替) 基本语法 jhat
jhat [option]

jstack (JVM Stack Trace)
用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。线程快照就是当前 虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合 在thread dump中,要留意下面几种状态 1、死锁,Deadlock(重点关注) 2、 等待资源,Waiting on condition (重点关注) 3、 等待获取监视器,Waiting on monitor entry (重点关注) 4、 阻塞 Blocked (重点关注) 5、 执行中 Runnable 6、暂停 Suspended 7、 对象等待中 Object.wait() 或 TIMED_WAITING 8、停止 Parked 基本语法 jstack [option]
option参数 6.1 -F 当正常输出的请求不被响应时,强制输出线程堆栈 6.2 -m 如果调用到本地方法的话,可以显示C/C++的堆栈 6.3 -l 除堆栈外,显示关于锁的附加信息 6.4c -h 帮助操作
jcmd
一个多功能的工具,可以用来实现前面除了jstat之外所有命令的功能。比如:用来导出堆、内存使用、查看Java进程、导出线程信息、执行GC、JVM运行时间等。
jcmd -l :列出所有的JVM线程
[root@localhost file]# jcmd -l 10048 portal.jar 9968 admin.jar 27089 org.apache.catalina.startup.Bootstrap start 10195 schedule.jar 10453 api.jar 15737 org.apache.catalina.startup.Bootstrap start 20141 org.apache.catalina.startup.Bootstrap start 25422 sun.tools.jcmd.JCmd -l 12686 vscheduleserver.jar —spring.profiles.active=test 18606 org.apache.zookeeper.server.quorum.QuorumPeerMain /opt/k3/zookeeper-3.4.10/bin/../conf/zoo.cfg
jcmd
[root@localhost file]# jcmd 20141 help 20141: The following commands are available: JFR.stop JFR.start JFR.dump JFR.check VM.native_memory VM.check_commercial_features VM.unlock_commercial_features ManagementAgent.stop ManagementAgent.start_local ManagementAgent.start GC.rotate_log Thread.print GC.class_stats GC.class_histogram GC.heap_dump GC.run_finalization GC.run VM.uptime VM.flags VM.system_properties VM.command_line VM.version help
jcmd
[root@localhost file]# jcmd 20141 VM.flags 20141: -XX:CICompilerCount=4 -XX:InitialHeapSize=1073741824 -XX:MaxHeapSize=3196059648 -XX:MaxNewSize=1065353216 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=357564416 -XX:OldSize=716177408 -XX:ThreadStackSize=8192 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
