项目随笔

【性能优化】如何在容器内使用 Arthas 生成火焰图

2021-11-16  本文已影响0人  熊本极客

1 拷贝 Arthas 到 容器内

Arthas 下载

$kubectl get pod -ntest -owide |grep flink
deployment-flink-jobmanager-85876c68fb-nr291          1/1     Running   0          11d     10.244.2.119   test-node-1

# 拷贝 arthas 到指定容器中
$kubectl cp /root/arthas-3.1.8.tar.gz deployment-flink-jobmanager-85876c68fb-nr291:/opt/arthas -ntest

2 运行 Arthas

# 进入指定容器
$kubectl exec -ntest -it deployment-flink-jobmanager-85876c68fb-nr291 bash
$cd /opt/arthas
$tar -zxvf arthas-3.1.8.tar.gz
# 首先有无设置确定 JAVA_HOME,然后执行 jar
$java -jar arthas-boot.jar

3 profiler 命令生成火焰图

火焰图类型

类型 横轴含义 纵轴含义 采样方式 应用场景
cpu 火焰图 cpu 占用时间 调用栈 固定频率采集 cpu 调用栈 寻找 cpu 占用高的函数;分析代码热路径
off-cpu 火焰图 阻塞时间 调用栈 固定频率采集阻塞事件的调用栈 I/O、网络等阻塞场景;锁竞争、死锁导致性能下降场景
内存火焰图 内存申请/释放函数调用次数 调用栈 跟踪 malloc/free、brk、mmap、页错误 内存泄露;大对象
hot/cold on-cpu 和 off-cpu 火焰图结合 调用栈 on-cpu 和 off-cpu 同时采集 结合 cpu 占用及阻塞的场景

Arthas profiler 命令详解

$profiler list
Basic events:
  cpu
  alloc
  lock
  wall
  itimer
Perf events:
  page-faults
  context-switches
  cycles
  instructions
  cache-references
  cache-misses
  branches
  branch-misses
  bus-cycles
  L1-dcache-load-misses
  LLC-load-misses
  dTLB-load-misses
  mem:breakpoint
  trace:tracepoint

# 火焰图 on-cpu 
$profiler start -e cpu

# 火焰图 off-cpu
$profiler start -e lock

# 火焰图 Hot/Cold
$profiler start -e wall

# 火焰图内存
$profiler start -e alloc
上一篇 下一篇

猜你喜欢

热点阅读