linux gstack pstack 进程运行堆栈查看工具

pstack的作用

1). 查看线程数(比pstree, 包含了详细的堆栈信息)

2). 能简单验证是否按照预定的调用顺序/调用栈执行

3). 采用高频率多次采样使用时, 能发现程序当前的阻塞在哪里, 以及性能消耗点在哪里?

4). 能反映出疑似的死锁现象(多个线程同时在wait lock, 具体需要进一步验证)

 

pstack的安装

pstack是gdb的一部分,如果系统没有pstack命令,使用yum搜索安装gdb即可

yum install gdb -y

 

pstack 与 gstack 区别

pstack是/usr/bin/gstack的软链接

 

使用实例

问题:php某进程一直卡着在running,找不到具体原因

执行 gstack 1696 效果如下:

可以看到运行堆栈信息已经打印出来,可根据信息排错

 

pstack原理

gstack本身是基于gdb封装的shell脚本.

让我们简单分析下这个强大的shell脚本:

由于代码太长, 这边选取最核心的片段, backtrace="thread apply all bt"
shell采用了here document的方式, 完成了GDB的交互工作(注意EOF标识, 及范围内的交互命令). 
重要的是输入thread apply all bt这个交互命令. 该命令要求输出所有的线程堆栈信息.
对GDB输出的结果, 通过管道并借助sed命令进行了替换和过滤.

pstack其实是gdb的一个功能封装, 但其实现的功能, 确实非常实用

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值