java 虚拟机命令常见的使用

it2025-04-06  19

1.jmap命令

jmap -histo|live 查询每个类内存占用大小

jmap -histo:live 端口号

[lzq@localhost ~]$ jmap -histo:live 5968 #查询端口号5968 PID的类内存占用情况 [lzq@localhost ~]$ jmap -histo:live 5968 | grep "cn.enilu.flash.api" #更具代码包名查询类内存情况 [lzq@localhost ~]$ jmap -histo:live 5968 | head -30 #查询内存占用排前30的类

jmap 导出dump文件

[lzq@localhost ~]$ jmap -dump:live,format=b,file=/home/lzq/flashwaimai.dump 5968 Dumping heap to /home/lzq/flashwaimai.dump ... Heap dump file created

2.jhat命令

运行jmap导出的dump文件

jhat dump文件,执行之后会启动一个7000端口的小型服务器

[lzq@localhost ~]$ jhat /home/lzq/flashwaimai.dump

3.jstack命令

导出stack日志文件

[lzq@localhost ~]$ jstack -l 5968 > /home/lzq/flashwaimai.log

查看java中的线程

[lzq@localhost ~]$ top -Hp 5968

找到内存或者CPU占用大的线程PID,将PID转换成16进制数

[lzq@localhost ~]$ printf "%x\n" 5968 1750

然后将转化后的16进制数到导出的stack日志文件搜索,从而定位问题

4.jcmd 命令的使用

查看当前运行的所有jvm虚拟机

[lzq@localhost ~]$ jcmd -l
最新回复(0)