程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Java诊断工具 Arthas 使用

balukai 2025-04-23 22:00:09 文章精选 2 ℃

安装启动

wget https://github.com/alibaba/arthas/releases/download/arthas-all-3.5.3/arthas-bin.zip
java -jar arthas-boot.jar

线程CPU与JVM 整体

dashboard

内部线程可以观测到JVM活动,如GC、JIT编译等占用CPU情况,方便了解JVM整体运行状况

ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应。

NAME: 线程名

GROUP: 线程组名

PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高

STATE: 线程的状态

CPU%: 线程的cpu使用率。比如采样间隔1000ms,某个线程的增量cpu时间为100ms,则cpu使用率=100/1000=10%

DELTA_TIME: 上次采样之后线程运行增量CPU时间,数据格式为秒

TIME: 线程运行总CPU时间,数据格式为分:秒

INTERRUPTED: 线程当前的中断位状态

DAEMON: 是否是daemon线程

JVM内部线程包括下面几种:

  • JIT编译线程: 如 C1 CompilerThread0, C2 CompilerThread0

Just-In-Time (JIT) 编译器是运行时环境的一个组件,通过在运行时将字节码编译为本机机器代码来提高 JavaTM 应用程序的性能。

  • GC线程: 如GC Thread0, G1 Young RemSet Sampling
  • 其它内部线程: 如VM Periodic Task Thread, VM Thread, Service Thread

JVM诊断参数

查看VM参数

vmoption


动态设置Full GC前后自动生成Dump

 vmoption HeapDumpAfterFullGC true


jvm启动时候设置自动生成dump

java -Xms200m -Xmx200m -Xmn50m -XX:PermSize=30m -XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC -XX:HeapDumpPath=/tmp gs-rest.dump

jinfo动态设置

jps
jinfo -flag +HeapDumpBeforeFullGC 98524

线程

最忙的前N个线程并打印堆栈

thread -n 3 

当前阻塞其他线程的线程

thread -b

指定状态线程

thread --state WAITING

追踪方法

方法内部调用路径,并输出方法路径上的每个节点上耗时

trace com.example.demo.DemoController cost

追踪一次

trace com.example.demo.DemoController cost -n 1


反编译

jad com.example.demo.DemoController


启动压测

抓包接口地址,利用chrome直接导出 curl



./go-stress-testing-mac -c 10 -n 1000 -p curl.log

Tags:

最近发表
标签列表