JVM排查命令概览
- jps:查看运行中java进程pid
- jinfo:查看jvm运行参数
- jmap:用于查看JVM各个区域的使用情况,还可以生成dump镜像
- jstack:查看线程运行情况,如线程阻塞、死锁等
- jstat:查看垃圾回收情况,如fullGC、youngGC
JVM调优命令
#查看java进程PID信息
jps
#查看java进程信息,PID
jps
#显示完整类名
jps -l
#显示启动参数
jps -v
#显示完整路径
jps -m
#查看远程主机java进程信息
jps <hostid>
#查看jvm参数配置,此命令和配置-XX:+PrintFlagsInitial等效,另外查看默认垃圾回收器使用-XX:+PrintCommandLineFlags
jinfo
#查看具体参数配置
jinfo -flag 参数 进程id
#查看所有参数
jinfo -flags 进程id
#查看java进程堆信息,以及导出用于分析的内存镜像快照
jmap
#查看某个java进程堆信息
jmap -heap <pid>
#生成jvm内存镜像文件,里面包含了内存堆详细的使用信息,用作分析,如jvisualvm
jmap -dump:live,format=b,file=D:\文件名.hprof <pid>
或
jmap -dump:live,format=b,file=D:\文件名.dump<pid>
#查看java进程中线程堆栈信息,可以定位导致异常线程的代码
jstack
#查看java进程线程堆栈信息
jstack -l <pid>
##扩展 配合top命令或ps命令和管道命令使用
#查看具体线程信息,后通过管道命令查看某个线程的堆栈信息
top -Hp <pid>
jstack <pid> | grep -A 10 <线程id的16进制数>
# 或者
ps -T -p <pid>
jstack <pid> | grep -A 10 <线程id的16进制数>
#监控jvm的统计信息,如gc垃圾收集,类加载行为
jstat
#显示有关类加载器行为的统计信息
jstat -class <pid>
#显示有关 Java HotSpot VM 即时编译器行为的统计信息
jstat -compiler <pid>
#显示有关垃圾收集堆行为的统计信息
jstat -gc <pid>
#显示各代容量及其对应空间的统计信息
jstat -gccapacity <pid>
#显示有关垃圾收集统计信息的摘要(与 相同jstat -gcutil),以及最后和当前(如果适用)垃圾收集事件的原因
jstat -gccause <pid>
#显示新生代的行为统计
jstat -gcnew <pid>
#显示新世代的大小及其对应空间的统计信息
jstat -gcnewcapacity <pid>
#显示有关老年代行为的统计信息和元空间统计信息
jstat -gcold <pid>
#显示老年代大小的统计信息
jstat -gcoldcapacity <pid>
#显示有关元空间大小的统计信息
jstat -gcmetacapacity <pid>
#显示有关垃圾收集统计信息的摘要
jstat -gcutil <pid>
#显示 Java HotSpot VM 编译方法统计信息
jstat -printcompilation <pid>
jps -h
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
jmap -h
用法:
jmap [选项] <pid>
(连接到正在运行的进程)
jmap [选项] <executable <core>
(连接到核心文件)
jmap [option] [server_id@]<远程服务器 IP 或主机名>
(连接到远程调试服务器)
其中 <option> 是以下之一:
<none> 打印与 Solaris pmap 相同的信息
-heap 打印java堆摘要
-histo[:live] 打印java对象堆的直方图;如果“活”
指定子选项,只计算活动对象
-clstats 打印类加载器统计信息
-finalizerinfo 打印关于等待完成的对象的信息
-dump:<dump-options> 以 hprof 二进制格式转储 java 堆
转储选项:
活转储仅活对象;如果没有指定,
堆中的所有对象都被转储。
format=b 二进制格式
file=<file> 将堆转储到 <file>
示例:jmap -dump:live,format=b,file=heap.bin <pid>
-F 力。与 -dump:<dump-options> <pid> 或 -histo 一起使用
当 <pid> 没有时强制堆转储或直方图
回应。不支持“live”子选项
在这种模式下。
-h | -help 打印此帮助信息
-J<flag> 将 <flag> 直接传递给运行时系统
#英文原注
Usage:
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)
where <option> is one of:
<none> to print same info as Solaris pmap
-heap to print java heap summary
-histo[:live] to print histogram of java object heap; if the "live"
suboption is specified, only count live objects
-clstats to print class loader statistics
-finalizerinfo to print information on objects awaiting finalization
-dump:<dump-options> to dump java heap in hprof binary format
dump-options:
live dump only live objects; if not specified,
all objects in the heap are dumped.
format=b binary format
file=<file> dump heap to <file>
Example: jmap -dump:live,format=b,file=heap.bin <pid>
-F force. Use with -dump:<dump-options> <pid> or -histo
to force a heap dump or histogram when <pid> does not
respond. The "live" suboption is not supported
in this mode.
-h | -help to print this help message
-J<flag> to pass <flag> directly to the runtime system
jstack -h
用法:
jstack [-l] <pid>
(连接到正在运行的进程)
jstack -F [-m] [-l] <pid>
(连接到挂起的进程)
jstack [-m] [-l] <可执行文件> <核心>
(连接到核心文件)
jstack [-m] [-l] [server_id@]<远程服务器 IP 或主机名>
(连接到远程调试服务器)
选项:
-F 强制线程转储。 当 jstack <pid> 没有响应(进程挂起)时使用
-m 打印 java 和 native 帧(混合模式)
-l 长列表。 打印关于锁的附加信息
-h 或 -help 打印此帮助信息
#英文原注
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
jstat -h (详情请看官网https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html)
用法:jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
定义:
<option> -options 选项报告的选项
<vmid> 虚拟机标识符。 vmid 采用以下形式:
<lvmid>[@<主机名>[:<端口>]]
其中 <lvmid> 是目标的本地虚拟机标识符
Java虚拟机,通常是一个进程id; <主机名> 是
运行目标 Java 虚拟机的主机名;
<port> 是 rmiregistry 上的端口号
目标主机。有关更完整的信息,请参阅 jvmstat 文档
虚拟机标识符的描述。
<lines> 标题行之间的样本数。
<interval> 采样间隔。允许使用以下形式:
<n>[“毫秒”|“秒”]
其中 <n> 是一个整数,后缀指定单位为
毫秒(“ms”)或秒(“s”)。默认单位是“毫秒”。
<count> 终止前要采集的样本数。
-J<flag> 将 <flag> 直接传递给运行时系统。
#英文原注
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.
JVM参数配置
参数种类 | 介绍 | 例子 |
-参数 | 标准参数 | -version |
-X参数 | -Xint | |
-Xms、-Xmx、-Xss、-Xmn | 经典参数,有对应的-XX参数,缩减版 | -Xms1024m |
-XX:参数=值 | 开启参数并配置值 | -XX:MetaspaceSize=1024m |
-XX:+参数 | 启动该参数配置 | -XX:+PrintGCDetials |
-XX:-参数 | 关闭该参数配置 | -XX:- |
经常使用参数
参数 | 解释 |
-XX:+PrintGCDetails | 打印GC日志 |
-XX:+PrintFlagsInitial | 打印JVM参数,=是初始值,:=后是修改过但仍是默认值 |
-XX:+PrintFlagsFinal | 打印JVM参数,=是初始值,:=后是修改过并且是最新值 |
-XX:PrintCommandLineFlags | 打印JVM参数,并可以打印默认垃圾回收器 |
-XX:SurvivorRatio= | 设置幸存者与伊甸园区占比,如设置8,则1:1:8 |
-XX:NewRatio= | 设置年轻代和老年代和占比,如设置2,则1:2 |
-XX:MaxTenuringThreshold | 设置对象最大存活年龄,最大15(对象头中占4位) |
-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/..(文件路径) | 当系统发生OOM时,生成当时的dump文件 |