如何使用火焰图对Spark的executor的CPU使用率进行profile?具体步骤,如何操作?

4 篇文章 0 订阅
1 篇文章 0 订阅

需要对executor CPU进行profile,看调用栈,有没有函数性能瓶颈,想用火焰图。

1. 登录executor所在NM节点;

2. 通过ps -ef | grep appId/executor 结合 jps 找到相应executor进程,找到进程pid;

3. 通过以下脚本,获取(程序会自动定时抓取并生成)供profile用的jstack和top等文件:

#!/bin/bash
if [ $# -eq 0 ]; then
    echo >&2 "Usage: jstackSeries <pid> <run_user> [ <count> [ <delay> ] ]"
    echo >&2 "    Defaults: count = 10, delay = 0.5 (seconds)"
    exit 1
fi
pid=$1          # required
user=$2         # required
count=${3:-10}  # defaults to 10 times
delay=${4:-0.5} # defaults to 0.5 seconds
while [ $count -gt 0 ]
do
    top -H -b -n1 -p $pid >top.$pid.$(date +%H%M%S.%N) &
    jstack -l $pid >jstack.$pid.$(date +%H%M%S.%N)
    sleep $delay
    let count--
    echo -n "."
done

比如,将上述脚本在节点上一个目录下保存为profile.sh,命令行执行 

./profile.sh  12345(pid)  yarn(要抓取的进程的启动用户)  360 0.5 

脚本需要4个输入参数,分别是 pid 、 进程启动用户、需要抓取的点个数、时间间隔,其中前两个为必要参数。

ps:需要注意的是,使用上述命令时,需要使用与待profile进程相同的用户,否则可能会遇到权限不对等问题;

4. 执行上述命令后,即可获取一揽子命名类似: jstack.6666.666666.66666666和top.66666.666666.666666666的用于profile文件;

5. 将上述文件夹拿到自己机器本地,假设放在了/tmp/profile 路径下,有了“基础资料”后,就可以制作火焰图了;

6. 从github上 git clone FlameGraph 项目到本地,项目地址为: https://github.com/brendangregg/FlameGraph.git

7. 在FlameGraph项目根目录下,通过命令: 

./stackcollapse-jstack.pl /tmp/profile/jstack* | ./flamegraph.pl > application_666666-executor.svg

即可生成对应的火焰图,是一个svg文件。

8. 通过浏览器等方式,将svg文件打开,即可看到火焰图,然后就可以进行分析啦~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值