31 命令行
02 jps 查看正在运行的Java进程
- jps (Java Process Status)
- jps -q 只显示pid
- jps -l 显示程序主类的全类名,如果执行的是jar,输出jar完整路径
- jps -m 输出启动时,应用参数参数即传递给main函数参数
- jps -v 列出虚拟机进程启动时JVM参数
- JVM参数 -XX:-UsePerfData jps命令无法探知该java进程
03 jstat 查看JVM的统计信息
jstat (JVM Statistics Monitoring Tool) 显示本地或者远程虚拟机进程中的类装载、内在、垃圾收集、JIT编译等运行数据
- 在没有GUI图形界面,只能提供纯文本控制台服务器上,其是运行定位虚拟机性能问题的首选工具
参数
╰─➤ jstat -help Usage: jstat --help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] Definitions: <option> An option reported by the -options option <vmid> Virtual Machine Identifier. A vmid takes the following form: <lvmid>[@<hostname>[:<port>]] Where <lvmid> is the local vm identifier for the target Java virtual machine, typically a process id; <hostname> is the name of the host running the target Java virtual machine; and <port> is the port number for the rmiregistry on the target host. See the jvmstat documentation for a more complete description of the Virtual Machine Identifier. <lines> Number of samples between header lines. <interval> Sampling interval. The following forms are allowed: <n>["ms"|"s"] Where <n> is an integer and the suffix specifies the units as milliseconds("ms") or seconds("s"). The default units are "ms". <count> Number of samples to take before terminating. -J<flag> Pass <flag> directly to the runtime system. -? -h --help Prints this help message. -help Prints this help message.
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
- option 参数
- interval 间隔时间
- count 指定查询次数
- -t 显示程序运行时间,单位秒
- -h 可以在周期性数据输出时,输出多少行数据后输出一个表头信息
option
- 类装载相关的
- -class 显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等
- 垃圾回收
- -gc 显示与gc相关的堆信息,各区容量
- -gccapacity,与-gc基本相同,但输出主要关注java堆各个区域使用的最大、最小空间
- -gcutil: 与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
- -gccause 导致最后一次或当前正在发生GC产生的原因
- -gcnew 显示新生代GC状况
- -gcnewcapacity 显示与-gcnew基本相同,主要关注使用的最大、最小空间
- -gcold 显示老年代GC情况
- -gcoldcapacity 显示-gcold基本相同,输出主要关注使用到的最大、最小空间
- 类装载相关的
04 jinfo
- jinfo (Configuration Info for Java)
- 查看虚拟机配置参数信息,也可以调整虚拟机的配置信息
查看
jinfo -sysprops PID 可查看由System.getProperties()取得的参数
jinfo -flags PID 查看赋值的参数
jinfo -flag 具体参数 PID 查看某个参数的值
╰─➤ jinfo -flag UseG1GC 56499 -XX:+UseG1GC ╰─➤ jinfo -flag MaxHeapSize 56499 -XX:MaxHeapSize=2147483648
修改
可以修改被标记为manageable的可以被实时修改
- java -XX:+PrintFlagsFinal -version | grep manageable
- jinfo -flag +PrintFlagsFinal PID
拓展
java -XX:+PrintFlagInitial 查看所有JVM参数启动的初始值
java -XX:+PrintFlagsFinal 查看所有JVM参数的最终值
05 jmap 导出内存映像文件&内存使用情况
- jmap (JVM Memory Map) 获取dump文件,获取目标java进程的内存信息
基本语法
- jmap [option] [PID]
jmap [option] <executable> <core>
jmap [option] [server_id@]<remote server IP or hostname>
参数
- -dump 生成java堆转储快照:dump文件
- -heap 堆空间信息
- -histo 堆中对象统计信息,包括类、实例数量和合计容量
- -histo:live只统计堆中存活对象
- -permstat 以classloader为统计口径,输出永久代的内存状态信息
- -finalizerinfo 显示F-queue 队列待执行finalize方法的对象
- -F
-j <flag>
导出内存映像文件/dump
- 自动
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:+HeapDumpBeforeFullGC
- -XX:HeapDumpPath=<filename.hprof>
- 手动
jmap -dump:format=b,file=<filename.hprof> PID
jmap -dump:live,format=b,file=<filename.hprof> PID
堆中存活对象
显示内存信息
- jmap -heap PID (GraalVM 无效)
- jmap -histo PID
06 jhat (JVM Heap Analysis Tool)
jhat与jmap搭配使用,用于分析jmap生成heap dump文件。jhat内置了一个微型HTTP/HTML服务器,生成dump文件分析结果。
http://localhost:7000/
jhat 在JDK9、JDK10中已经删除,官方建议用VisualVM
- 命令:jmap -port 7001 2.hprof
07 jstack(JVM Stack Trace)
关注的状态
- 死锁 Deadlock(重点关注)
- 等待资源 Waiting on condition (重点关注)
- 等待获取监视器 Waiting on monitor entry (重点关注)
- 阻塞 Blocked(重点关注)
- 执行中 Runnable
- 暂停 Suspended
- 对象等待中 Object.wait() 或 TIMED_WAITING
- 停止 Parked
参数
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
jcmd
JDK1.7增加,多功能工具。
实现除jstat之外的所有命令功能。比如:导出堆、内存使用、查看Java进程、导出栈信息、GC、JVM运行时间
- 命令参数
- jcmd -l 列出所有jvm进程
- jcmd 6316 help 针对指定进程,列出支持的所有命令
- jcmd pid 具体指令 显示指定进程的指令命令数据
- jcmd pid Thread.print
jstatd
配合jps、jstat远程监控