jvisualvm 【jdk 自带工具】
程序启动添加jvm参数
-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=127.0.0.1 #服务器端ip
-Dcom.sun.management.jmxremote.port=8089 #服务器端 jmx开放的端口号
-Dcom.sun.management.jmxremote.ssl=false #关闭ssl
-Dcom.sun.management.jmxremote.authenticate=false #关闭验证
参考链接:【java虚拟机】jvisualvm连接远程jvm_Jahnsonxi的博客-CSDN博客_jvm远程连接
CPU热点方法分析使用参考:实战 VisualVM 定位 Java 程序 CPU 热点_程序员石磊的博客-CSDN博客
内存泄漏分析参考:Java性能调优:利用VisualVM进行性能分析 - 朝雨忆轻尘 - 博客园
dump工具:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
async-profiler【火焰图】
https://github.com/jvm-profiling-tools/async-profiler
如果官方给的二进制文件如果出现 build/jattach 不能执行(报错如下),需要编译源码
build/jattach: cannot execute binary file
下载源码 https://github.com/jvm-profiling-tools/async-profiler/archive/v1.8.3.tar.gz
yum install gcc-c++ #安装编译器
make #编译
执行以下命令,可以输出火焰图
./profiler.sh -d 60 -f ./flamegraph.svg 16727
-d 60 表示采集周期为60s
-f ./flamegraph.svg 表示输出的火焰图图片的位置
16727 为java程序进程pid
Arthas Alibaba开源的Java诊断工具
代码:https://github.com/alibaba/arthas
文档:Arthas 用户文档 — Arthas 3.6.0 文档
下载jar包及依赖
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar #第一次启动需要下载依赖,下载之后的文件就可以将依赖复制到不能联网的机器上使用了
(下载过jar包之后)启动的时候会让选择需要操作的java进程
常用命令:
dashboard 展示当前进程的信息,包括线程的cpu、内存使用情况,堆内存使用情况,jdk版本等信息
thread 获取当前线程
trace 输出方法内部调用链的耗时,使用:trace 类的全路径 方法名,eg:trace demo.MathGame run
stack 输出当前方法被调用的调用路径使用:stack 类的全路径 方法名,eg:stack demo.MathGame run; stack demo.MathGame run '#cost > 10' -n 5,过滤耗时大于10ms的,只获取5条就停止,否则会一直刷屏
profiler (使用async-profiler生成火焰图,上面下载的时候已经有async-profiler的依赖了,不需要自己单独安装)
profiler start 开始收集应用cpu热点的火焰图
profiler stop 结束收集应用cpu热点的火焰图。生成的结果保存到应用的工作目录下的arthas-output目录,可以通过 --file参数来指定输出结果路径。
profiler status 查看收集状态