一、命令行工具
1.1 jps
查看正在运行的java进程。
jps命令还可以加一些可选参数
-q:仅仅显示进程id-l:显示进程id和java全类名-m:输出虚拟机进程启动时传递给主类main的参数-v:列出虚拟机进程启动时的JVM参数 hostid:远程java进程的ip+端口,查看远程java进程的信息1.2 jstat
jstat(Java Virtual Machine Statistics Monitoring Tool)Java虚拟机统计信息工具。用于监控虚拟机各种运行状态信息,它可以显示进程中类加载、内存、垃圾收集、JIT编译等运行数据。
在没有GUI图形界面,只提供了纯文本控制台的服务器上,它将是运行期间定位虚拟机性能问题的首选工具,常用于检测垃圾回收问题以及内存泄漏问题。
用法:
jstat-<option>[-t][-h<lines>]<vmid>[<interval>[<count>]]选项option可以由以下值构成:
- 类加载相关
- -class:显示ClassLoader的相关信息:类的加载、卸载信息、总空间、类加载所消耗的时间等
- 垃圾回收相关
- -gc:显示与GC相关的堆信息,包括eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
- -gccapacity:显示内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大、最小空间
- -gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
- -gccause:显示内容与-gcutil一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因
- -gcnew:显示新生代GC状况
- -gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
- -gcold:显示老年代GC状况
- -gcoldcapacity:显示内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
- -gcpermcapacity:显示永久代使用到的最大、最小空间
interval参数:指定输出的周期,单位为毫秒
count参数:指定输出的总次数
-t参数:可以在输出信息前面加锁一个时间戳列,显示程序的运行时间
-h参数:可以周期性输出表头信息
jstat-gc 进程idS0C:survivor0区域分配大小
S1C:survivor1区域分配大小
S0U:survivor0区域已使用大小
S1U:survivor1区域已使用大小
EC:eden区域分配大小
EU:eden区域已使用大小
OC:old区域分配大小
OU:old区域已使用大小
MC:meta元空间区域分配大小
MU:meta元空间区域已使用大小
CCSC:压缩类空间区域分配大小
CCSU:压缩类空间区域已使用大小
YGC:young gc次数
YGCT:young gc时间
FGC:full gc次数
FGCT:full gc时间
CGC:总共gc次数
CGCT:总共fc时间
GCT:总共fc时间
1.3 jinfo
实时查看和修改JVM配置参数
开发任意可能不知道某一个具体的jvm参数默认值,这种情况下就可以使用jinfo来查看
查看:
查看系统参数:jinfo-sysprops 进程id 查看曾经赋值的参数:jinfo-flags 进程idjinfo -flags 进程id
修改:
jinfo可以在程序运行期间修改部分参数并立即生效。
1.4 PringFlagsFinal
查看所有JVM参数的最终值。
用法:
java-XX:+PrintFlagsFinal1.5 jmap
导出内存快照,查看内存使用情况。
jmap-dump:format=b,file=1.hprof 进程id 生成java堆快照文件 jmap-dump:live,format=b,file=1.hprof 进程id 只保存堆中的存活对象 jmap-heap:输出整个堆空间的详细信息 jmap-histo:输出堆中对象的统计信息,包括:类、实例数量等,-histo:live只统计堆中的存活对象手动导出堆内存快照
jmap-dump:format=b,file=1.hprof 进程id 生成java堆快照文件 jmap-dump:live,format=b,file=1.hprof 进程id 只保存堆中的存活对象自动导出堆内存快照,添加JVM参数
-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=1.hprof1.6 jhat
自带堆分析工具,与jmap搭配使用,用于分析jmap生成的堆快照文件。
使用了jhat命令,就启动了一个http服务,端口是7000,即http://localhost:7000
使用:
jhat 堆内存快照1.7 jstack
打印JVM中线程快照。
生成线程快照的作用:可用于定位线程出现长时间停顿,如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。
重点留意下面几种状态:
- 死锁,DeadLock
- 等待资源,Waiting on condition
- 邓艾获取监视器,Waiting on monitor entry
- 阻塞,Blocked
使用:
jstack 进程id1.8 jcmd
多功能命令行,具有除了jstat以外的所有命令的功能。