快速拉起火焰图

使用arthas(async-profiler)

目前容器都会默认安装arthas,路径为:

/workspace/carkey/jarlibs/arthas

arthas火焰图操作参考:

https://www.cnblogs.com/wwjj4811/p/16588399.html

火焰图的功能基于async-profiler实现,命令参数见官方文档:
https://github.com/jvm-profiling-tools/async-profiler

绕过权限:

  • –all-user – include only user-mode events. This option is helpful when kernel profiling is restricted by perf_event_paranoid settings.
  • –fdtransfer – runs “fdtransfer” alongside, which is a small program providing an interface for the profiler to access, perf_event_open even while this syscall is unavailable for the profiled process (due to low privileges). See Profiling Java in a container.
  • docker run时可以添加–cap-add SYS_ADMIN

使用perf

容器中需要先安装:

yum install perf

下载FlameGraph:

wget https://github.com/brendangregg/FlameGraph/archive/refs/tags/v1.0.tar.gz

火焰图使用命令:

perf record -F 99 -p 2347 -g — sleep30


perf record表示采集系统事件, 没有使用 -e 指定采集事件, 则默认采集 cycles(即 CPU clock 周期), -F 99 表示每秒 99 次, -p 2347 是进程号, 即对哪个进程进行分析, -g 表示记录调用栈, sleep 30 则是持续 30 秒.

-F 指定采样频率为 99Hz(每秒99次), 如果 99次 都返回同一个函数名, 那就说明 CPU 这一秒钟都在执行同一个函数, 可能存在性能问题.

生成火焰图:

# 解析perf收集的信息
perf script -i perf.data &> perf.unfold
# 生成折叠后的调用栈
./stackcollapse-perf.pl perf.unfold &> perf.folded
# 生成火焰图
./flamegraph.pl perf.folded > perf.svg

perf report 命令可以统计每个调用栈出现的百分比, 然后从高到低排列.

图片

使用strace

安装:

yum install strace

功能:

调试命令堆栈

案例一:域名无法解析

strace -e trace=open ping www.baidu.com

百度dns解析做了负载均衡和别名,可以阅读文章查看流程。

更多用法:

https://zhuanlan.zhihu.com/p/180053751

容器上的应用cpu和alloc选项暂不可用容器上容器上的应用cpu和alloc选项暂不可用的应用cpu和alloc选项暂不可用容器上的应用cpu和alloc选项暂不可用

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/361526.html

(0)
联系我们
联系我们
分享本页
返回顶部