JVM 相关

Dec 27, 2021


JMX

在 Java 启动脚本中增加如下三个参数,即可开启 JMX 远程连接

-Dcom.sun.management.jmxremote.port=2235 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

然后启动 ./jvisualvm,在远程主机上右键,添加 JMX 连接,即可远程监控程序运行状态

jps

该命令不需要加进程ID, 【jps + 参数】即可,参数如下:

-q: 只显示VM 标示,不显示jar,class, main参数等信息。
-m: 输出主函数传入的参数。
-l: 输出应用程序主类完整package名称或jar完整名称。
-v: 列出jvm启动参数。
-V: 输出通过.hotsportrc或-XX:Flags= filename 指定的jvm参数。

jstat

详情参考这里

jstat 命令格式如下:

jstat [命令选项] [pid] [间隔时间(毫秒)] [查询次数]

命令选项可以通过 ./jstat -options 查看,结果如下:

-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

命令举例:

./jstat -gcutil 29262
./jstat -gcutil -t 29262 1000 100
./jstat -gc -t 29262 1000

jmap

详情参考这里

导出内存堆栈:

./jmap -dump:format=b,file=29262.hprof 29262

查看占用空间最大的 30 个对象(live:只计算活动的对象)

./jmap -histo:live 29262 | head -30

打印堆的摘要信息,包括使用的GC算法、堆配置信息、各区域内存使用信息等:

./jmap -heap 8501

打印等待终结的对象信息

./jmap -finalizerinfo 8501

jstack

./jstack 29262
./jstack 29262 > 29262.log

jvisualvm

可以使用jvisualvm工具对堆栈信息进行分析
该工具位于 JAVA_HOMEbin 目录下
执行./jvisualvm命令即可打开

JProfiler

打开堆栈信息之后,常用分析路径:

最大对象 –> 右键:使用选定对象 –> 引用:传入引用:确定 –> 下拉:java堆栈:显示更多

即可定位到 java 代码