使用arthas(async-profiler)
目前容器都会默认安装arthas,路径为:
/workspace/carkey/jarlibs/arthas
arthas火焰图操作参考:
火焰图的功能基于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解析做了负载均衡和别名,可以阅读文章查看流程。
更多用法:
容器上的应用cpu和alloc选项暂不可用容器上容器上的应用cpu和alloc选项暂不可用的应用cpu和alloc选项暂不可用容器上的应用cpu和alloc选项暂不可用
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/361526.html