1.jmap
此命令可以用来查询内存信息,实例个数及占用内存大小
1.1 查看堆内存概要信息(内存分配统计)
jmap -histo[:live] <pid>
.-histo:显示堆中对象的统计信息,包括每个类的实例数量、占用内存大小等
:live(可选):仅统计活动对象(即未被垃圾收集器回收的对象)。不指定此选项时,将统计所有对象(包括可回收的对象)。
写入到文件:
2.生成堆内存快照
jmap -dump:[format=b,]file=<dumpfile> <pid>
-dump:创建当前 Java 进程的堆内存转储文件。
format=b(可选):指定转储文件格式为二进制(HProf)。默认情况下,如果省略格式选项,通常也会生成 HProf 格式的 dump 文件。
file=<dumpfile>:指定转储文件的保存路径和名称。例如:./heapdump.hprof。
jmap -dump:format=b,file=myapp_heapdump.hprof 18000
3.查看堆内存详细信息(如分代大小,已使用空间)
jmap -heap <pid>
2.jstack
jstack [options] <pid>
常用选项
1. -F 或 --force:强制输出堆栈信息
当常规方式无法获取线程堆栈时(比如目标进程无响应),使用此选项强制 jstack 生成线程快照。
2. -l 或 --long:显示锁的附加信息
在输出的线程堆栈中包含关于锁的持有者、等待者等更详细的锁信息,有助于分析线程间的同步问题。
3. -m 或 --mixed:混合模式,同时打印 Java 和本地(native)线程栈
对于涉及到 JNI 调用或者使用了 native 库的 Java 应用,此选项会同时显示 Java 线程和关联的本地线程的堆栈信息。
4. -J 选项传递给 JVM
如果需要向 jstack 使用的 JVM 传递额外参数(如 -J-d64 以指定 64 位模式),可以使用 -J 选项前缀
jstack 19220
jstack -l 19220
Jinfo
jinfo 是 Java 平台上一个用于查看和修改 Java 进程启动参数(Java 系统属性和 VM 选项)的命令行工具。它可以动态地获取或调整正在运行的 Java 进程的某些配置,而无需重新启动该进程。以下是 jinfo 命令的基本使用、功能说明以及实例
jinfo [option] <pid>
1.显示所有启动参数
jinfo -flags <pid>
2.查询特定系统属性值
jinfo -flag <property_name> <pid>
3.修改特定系统属性值(仅限 HotSpot VM)
jinfo -flag [+|-]<property_name>=<value> <pid>