【性能优化】如何在容器内使用 Arthas 生成火焰图
2021-11-16 本文已影响0人
熊本极客
1 拷贝 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 占用及阻塞的场景 |
$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