docker程序线上排查
2022-05-13 本文已影响0人
红玫瑰一双眼
安装并启动Arthas
容器中不存在jar包的情况
docker exec -it ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
容器中已存在jar包的情况
docker exec -it ${containerId} /bin/bash -c "java -jar arthas-boot.jar"
常用命令
-n 很多命令都可以加,都是次数限制
watch
下面案列表示查看该方法的参数和返回值或者异常,统计5次,各层参数遍历3层
'{params,returnObj,throwExp}' 查看参数、返回值、异常
-x参数或者返回值的显示层数
watch com.free.as.bus.controller.TestController test1 '{params,returnObj,throwExp}' -n 5 -x 3
monitor
下面案例表示每5s统计一次共统计三次
-c 统计周期,单位:秒
monitor -c 5 com.free.as.bus.controller.TestController test1 -n 3
trace
案例:统计方法耗时大于100毫秒并且不跳过JDK的方法
'#cost > 100' 耗时大于100毫秒
trace com.free.as.bus.controller.TestController test1 '#cost > 100' -n 5 --skipJDKMethod false
tt
watch指令的托管版,方法调用情况无需实时查看,-n 参数是为了防止方法调用太猛导致jvm撑爆
tt -t com.free.as.bus.controller.TestController test1 -n 3
thread
线程问题排查
thread -b 找出当前阻塞其他线程的线程
thread -n 3 展示当前最忙的前3个线程并打印堆栈