pstack的使用

pstack是gdb工具,用于打印进程(含线程)的调用栈。在程序hang时比较有用。

输出pstack.txt

# PID是进程ID
# 因为CPU hang,可以把LOOP值调大
LOOP=5
for x in $(seq 1 $LOOP); do
  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $PID 2>/dev/null
  sleep 0.1
done > pstack.txt

pstack.txt 转成火焰图 cat pstack.txt | stackcollapse-gdb.pl | flamegraph.pl

如果上述转法有问题,可以用脚本加工一下pstack.txt。 例如:java程序运行pstack,可以删除不识别的栈,保留函数名称中带参数, cat pstack.txt | grep -vF '??' | sed -E 's|^Thread|\nThread|' | sed -E 's|, |,|g' | stackcollapse-gdb.pl | flamegraph.pl

Author: zhengzhiyong

Created: 2023-11-14 二 06:57

Validate