pstack使用和原理【转】

简介:

转自:http://www.cnblogs.com/mumuxinfei/p/4366708.html

前言:
最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于是想比较下pstack和jstack的异同. 
和jstack一样, pstack亦能展现进程的线程堆栈快照, 非常方便验证和性能评估. 本文用来简单展示下pstack的使用方式和原理.

pstack使用
pstack使用非常的简单, 让我们写个简易多线程程序:

编译执行后, 使用pstack体验下:

注: 大秘密, sleep函数貌似是基于nanosleep实现的, ^_^.
这边我们能清楚的看到两个线程在执行线, 以及当前线程的详细函数栈信息.
对pstack的作用, 大致可以归纳如下:
1). 查看线程数(比pstree, 包含了详细的堆栈信息)
2). 能简单验证是否按照预定的调用顺序/调用栈执行
 3). 采用高频率多次采样使用时, 能发现程序当前的阻塞在哪里, 以及性能消耗点在哪里?
  4). 能反映出疑似的死锁现象(多个线程同时在wait lock, 具体需要进一步验证)
当然还能举例更多的作用, 相信使用过jstack的coder, 必然深以为然.

pstack原理:
pstack用途很大, 那其背后的原理是啥?
可以观察发现, 其实pstack是/usr/bin/gstack的软链接, 而gstack本身是基于gdb封装的shell脚本.

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

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

总结:
pstack其实是gdb的一个功能封装, 但其实现的功能, 确实非常实用. 本文讲述了pstack使用和原理, 以及常见的用途, 下文将讲述死锁检测的一种机制, 欢迎关注.

写在最后:
如果你觉得这篇文章对你有帮助, 请小小打赏下. 其实我想试试, 看看写博客能否给自己带来一点小小的收益. 无论多少, 都是对楼主一种由衷的肯定.

  









本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/5897391.html,如需转载请自行联系原作者

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
Shell
在Bash中检查变量是否为空的几种方法
在Bash中检查变量是否为空的几种方法
2240 0
在Bash中检查变量是否为空的几种方法
|
数据安全/隐私保护
阿里云的国内云与国际云差异
本文对比了阿里云国内云与国际云的核心差异,从用户群体、合规要求、数据安全、延迟等方面提供决策参考,帮助企业根据业务需求选择合适的云服务。
阿里云的国内云与国际云差异
|
机器学习/深度学习 人工智能 自然语言处理
Reve Image:设计师失业警告!AI秒出海报级神图,排版自动搞定
Reve Image 是 Reve 推出的全新 AI 图像生成模型,专注于提升美学表现、精确的提示遵循能力以及出色的排版设计,能生成高质量的视觉作品。
851 29
Reve Image:设计师失业警告!AI秒出海报级神图,排版自动搞定
|
存储 API 数据安全/隐私保护
web录屏方案实现
【10月更文挑战第9天】
824 138
|
安全 Shell 测试技术
Android 11 来袭,一起来看看怎么适配(二)
Android 11 来袭,一起来看看怎么适配
|
算法
KMP算法
KMP算法
347 0
【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
514 0
|
机器学习/深度学习 人工智能 Cloud Native
超全阿里系电子书年度合集来了!热门新书持续更新中...
随着双12的落幕,2019也接近尾声了。经过了一年的奋(tuō)斗(fà),你是否还有遗憾和未尽的目标呢?开发者社区甄选了本年度四大专栏,最受欢迎的30+本电子书,2019 不留遗憾!
197025 3
超全阿里系电子书年度合集来了!热门新书持续更新中...
|
监控 算法 Java
JVM常用性能分析工具 1
JVM常用性能分析工具
645 0
|
弹性计算 缓存 测试技术
云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测!
阿里云2核4g服务器能支持多少人访问?2核4G服务器并发数性能测试,阿小云账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量