常用jvm命令
jps
jps与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号
jconsole
jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
jmap
打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。
jmap -heap pid #显示Java堆详细信息
jmap -histo pid #显示堆中对象的统计信息
jmap -histo pid
结果解析:
#instance 是对象的实例个数
#bytes 是总占用的字节数
class name 对应的就是 Class 文件里的 class 的标识
B 代表 byte
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有 [ 代表数组, [I 就相当于 int[]
对象用 [L+ 类名表示
jmap -dump:format=b,file=<file-path> pid #堆转储文件
示例:jmap -dump:format=b,file=/var/log/heapdump 1234
jmap -dump:live,format=b,file=heap.hprof 12345
jstat
jstat是一个极强的监视VM内存工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat -class pid 查看加载class的数量,及所占空间等信息
jstat -compiler pid 查看VM实时编译的数量等信息
jstat -gc pid 查看gc情况
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gccapacity pid 查看gc中内存使用情况
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
jstat -gcnew pid 查看新生代信息
jstat -gcnewcapacity pid 查看新生代内存占用情况
jstat -gcold pid 查看老年代信息
jstat -gcoldcapacity pid 查看老年代内存占用情况
jstat -gcmetacapacity pid 查看元数据区内存占用情况
jstat -util pid 统计gc信息统计
jstack
jstack pid 查看jvm线程运行状态,是否有死锁现象等等信息
jstack -F pid pid无法响应时,强制打印堆栈
jstack -l pid 打印关于锁的附加信息
jstack -m pid 混合模式输出(包括java和本地c/c++片段)堆栈
verbose
Java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息
java -verbose:class
在程序运行的时候有多少类被加载!你可以用verbose:class来监视,在命令行输入java -verbose:class XXX (XXX为程序名),也可以直接在JVM启动时添加启动参数-verbose:class,你会在控制台(或者指定的启动日志文件,如catalina.out中)看到加载的类的情况。
verbose和 verbose:class 含义相同,输出虚拟机装入的类的信息,显示的信息格式如下:
[Opened D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loaded java.lang.Object from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
java –verbose:gcerbose:gc
在虚拟机发生内存回收时在输出设备显示信息,格式如下: [Full GC 256K->160K(124096K), 0.0042708 secs]该参数用来监视虚拟机内存回收的情况。
jjava -verbose:jniva -verbose:jni
使用-verbose:jni输出native方法调用的相关情况,一般用于诊断jni调用错误信息。
在虚拟机调用native方法时输出设备显示信息,格式如下: [Dynamic-linking native method java.lang.Object.registerNatives ... JNI] 该参数用来监视虚拟机调用本地方法的情况,在发生jni错误时可为诊断提供便利。
参考链接:
https://blog.csdn.net/wangshuminjava/article/details/80928354
https://www.cnblogs.com/lizhonghua34/p/7307139.html
http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024892.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人