前言:
  最近小组在组织<<深入剖析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使用和原理, 以及常见的用途, 下文将讲述死锁检测的一种机制, 欢迎关注.

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

  

pstack使用和原理相关推荐

  1. php trace 函数,PHP Trace 实现原理

    phptrace 实现原理 总体介绍 PHPTrace致力于打造一款实时跟踪PHP函数调用,获取PHP函数调用栈信息以及PHP解释器状态的工具,这个PHP工具应该像系统工具strace/pstack一 ...

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

    pstack的作用 1). 查看线程数(比pstree, 包含了详细的堆栈信息) 2). 能简单验证是否按照预定的调用顺序/调用栈执行 3). 采用高频率多次采样使用时, 能发现程序当前的阻塞在哪里, ...

  3. 理解原理的重要性 - 论PostgreSQL merge join 成本评估陷阱 含case

    背景 PostgreSQL支持三种JOIN的方法,nestloop, merge, hash. 这三种JOIN方法的差别和原理可以参考 https://www.postgresql.org/docs/ ...

  4. kill进程_你还在使用kill -9 杀进程吗?从原理谈避免踩雷!

    你要"跑路"了吗? 只要你用过 UNIX/LINUX ,我敢打赌你大概率执行过这样一条命令,也就是俗话说的"杀进程": kill -9 执行它,是不是如同执行以 ...

  5. pprof 的原理与实现

    wziww 是帮我更新 golang-notes 的小伙伴,这篇 pprof 的原理与实现是他写的,本文如果有打赏收入的话,会全额转给他~ 本章节没有介绍具体 pprof 以及周边工具的使用, 而是进 ...

  6. php trace 图形,PHP Trace 设计原理

    PHPTrace 设计原理 简单介绍 PHPTrace致力于打造一款实时跟踪PHP函数调用,获取PHP函数调用栈信息以及PHP解释器状态的工具,这个PHP工具应该像系统工具strace/pstack一 ...

  7. PostgreSQL 备库apply延迟原理分析与诊断

    标签 PostgreSQL , 物理流复制 , IO不对称 背景 开车的同学都喜欢一马平川,最好是车道很多,车很少,开起来爽. 大家想象一下,同样的车速,6车道每秒可以通过6辆车,而1车道每秒就只能通 ...

  8. buct编译原理个人作业

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 buct编译原理课设作业 一.正则表达式 -> DFA -> 最小化DFA 二.LL(1) 三.LR(0) 四.LR(1) ...

  9. pstack 安装linux_linux下跟踪进程调用栈strace pstack gstack

    pstack PID gstack PID top -H -p PID 引子: 1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK ...

最新文章

  1. 智能调温需要哪些计算机知识,一种智能调温的计算机用鼠标的制作方法
  2. angular监听路由跳转
  3. kafka topic常用命令
  4. 甲骨文宣布供应链管理云平台支持LogFire仓库管理系统
  5. 安全生产六步法是什么_支塘镇探索“五步法”压紧压实出租厂房安全生产主体责任...
  6. R-CNN学习笔记4:Fast R-CNN
  7. 电脑中的cache文件夹可以删除吗?
  8. 什么是云计算中的SaaS(软件即服务)?
  9. protobuf中repeated类型变量与C++ vector类型变量的相互赋值方法
  10. 将一个对象转换成数组
  11. 基于FPGA的数字混频器设计与仿真
  12. 2023.04.22更新大麦网移动端/M端抢购软件和使用教程
  13. caffe 损失函数
  14. FFMPEG关于avio_alloc_context申请使用内存释放问题
  15. 裴蜀定理(或 贝祖定理 )
  16. 小程序 zoom_Zoom是否真正监视您在通话中使用的应用程序?
  17. 计算机用户名更改不了,分享简单几步解决win10电脑用户名改不了的问题
  18. python线性方程组求解_python求解方程组的三种方法
  19. 三菱mode bus tcp通讯_廊坊三菱MR-J4
  20. Java 实现 QQ 登陆

热门文章

  1. 《仙剑奇侠传3》仙术合集
  2. 糟糕的打谱员(dp)
  3. 如何用AI做一个好看的图案
  4. Batch Renormalization
  5. 使用Motrix解决浏览器下载速度慢的问题
  6. asp.net简单实现导出excel报表
  7. 招商银行信用卡中心大数据
  8. 有个这样的程序猿男友你是否愿意嫁给他呢?
  9. 计算机键盘分为哪5个区,计算机键盘分区之功能键区
  10. 网络攻防之信息收集和社工技巧