Arthas定位Java性能问题(docker 部署服务)

1、linux安装wget命令

sudo yum -y install wget

2、下载安装Arthas

sudo wget https://alibaba.github.io/arthas/arthas-boot.jar

3、docker容器安装Arthas(将arthas copy到容器里面)

docker cp arthas-boot.jar a03b20d2d33c:/home

        找到占用CPU最高的容器ID

4、进入容器

docker exec -it a03b20d2d33c /bin/sh

 

5、启动arthas

java -jar arthas-boot.jar

        也可直接进入容器,在容器里面进行下载arthas,然后在执行启动arthas命令

        输入命令之后,确定好进程,回车即可

6、dashboard命令,查看程序的线程、内存、GC、运行环境信息

 

7、thread 命令,查看占用CPU最高的线程,总线程数,跟线程状态对应的数量

Threads Total: 303, NEW: 0, RUNNABLE: 76, BLOCKED: 0, WAITING: 60, TIMED_WAITING: 152, TERMINATED: 0, Internal threads: 15

8、thread ID 根据线程定位问题(根据线程ID打印堆栈信息)

9、线程池查看

thread | grep pool

10、线程池死锁问题排查

thread --state BLOCKED

11、火焰图

什么时候用火焰图:当发现CPU的占用率与实际业务应该出现的占用率不相符,或者对Nginx worker的资源使用率(CPU、内存、磁盘IO)出啊先怀疑情况下,使用火焰图进行抓取,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下

        启动火焰图:profiler start

        获取采集的sample数量:profiler getSamples

        查看profiler状态:profiler status

        停止profiler:profiler stop

通过CPU火焰图去定位问题:

        y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

        x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

        火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

        颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

 

1、通过dashboard查看占用CPU高的线程

2、通过thread 查看线程占用资源较高

3、thread ID定位具体方法问题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值