一.安装和启动Arthas
1.dockerfile
FROM openjdk:8-jdk-alpine
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
MAINTAINER "Fan.Wang"
LABEL description="DB2ES"
WORKDIR app
ADD ./target/wk-sync-1.0.jar /app/wk-sync.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN apk add --no-cache tini
ENTRYPOINT ["/sbin/tini", "--"]
EXPOSE 8888
CMD java -jar -Xms2048m -Xmx8192m /app/wk-sync.jar
2.启动应用后 启动arthas-boot来进行诊断
docker exec -it 要诊断的容器id /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
二.使用Arthas
1.查看仪表盘
dashboard
2.thread:线程信息
#总览
thread
#显示当前最忙的前n个线程,并打印出堆栈
thread -n 5
#查看指定线程的堆栈信息
thread 3
#找出当前阻塞其他线程的线程
thread -b
#指定采样时间间隔
thread -n 5 -i 10000
3.jad 反编译
jad 类路径
4.输出最繁忙的前3个线程
thread -n 3
5.trace
基本用法
trace 类路径 方法名
按照时间过滤
trace 类路径 方法名 '#cost>时间(ms)'
可以看到过滤以后,观察到的都是时间大于0.5ms的该方法的调用
trace多个类或者多个函数
trace命令只会trace匹配到的函数里的子调用,并不会向下trace多层。因为trace是代价比较贵的,多层trace可能会导致最终要trace的类和函数非常多。
可以用正则表匹配路径上的多个类和函数,一定程度上达到多层trace的效果。(注意-E参数)
trace -E com.test.ClassA|org.test.ClassB method1|method2|method3