pstack使用和原理
前言:
最近小组在组织<<深入剖析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使用和原理相关推荐
- php trace 函数,PHP Trace 实现原理
phptrace 实现原理 总体介绍 PHPTrace致力于打造一款实时跟踪PHP函数调用,获取PHP函数调用栈信息以及PHP解释器状态的工具,这个PHP工具应该像系统工具strace/pstack一 ...
- linux gstack pstack 进程运行堆栈查看工具
pstack的作用 1). 查看线程数(比pstree, 包含了详细的堆栈信息) 2). 能简单验证是否按照预定的调用顺序/调用栈执行 3). 采用高频率多次采样使用时, 能发现程序当前的阻塞在哪里, ...
- 理解原理的重要性 - 论PostgreSQL merge join 成本评估陷阱 含case
背景 PostgreSQL支持三种JOIN的方法,nestloop, merge, hash. 这三种JOIN方法的差别和原理可以参考 https://www.postgresql.org/docs/ ...
- kill进程_你还在使用kill -9 杀进程吗?从原理谈避免踩雷!
你要"跑路"了吗? 只要你用过 UNIX/LINUX ,我敢打赌你大概率执行过这样一条命令,也就是俗话说的"杀进程": kill -9 执行它,是不是如同执行以 ...
- pprof 的原理与实现
wziww 是帮我更新 golang-notes 的小伙伴,这篇 pprof 的原理与实现是他写的,本文如果有打赏收入的话,会全额转给他~ 本章节没有介绍具体 pprof 以及周边工具的使用, 而是进 ...
- php trace 图形,PHP Trace 设计原理
PHPTrace 设计原理 简单介绍 PHPTrace致力于打造一款实时跟踪PHP函数调用,获取PHP函数调用栈信息以及PHP解释器状态的工具,这个PHP工具应该像系统工具strace/pstack一 ...
- PostgreSQL 备库apply延迟原理分析与诊断
标签 PostgreSQL , 物理流复制 , IO不对称 背景 开车的同学都喜欢一马平川,最好是车道很多,车很少,开起来爽. 大家想象一下,同样的车速,6车道每秒可以通过6辆车,而1车道每秒就只能通 ...
- buct编译原理个人作业
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 buct编译原理课设作业 一.正则表达式 -> DFA -> 最小化DFA 二.LL(1) 三.LR(0) 四.LR(1) ...
- pstack 安装linux_linux下跟踪进程调用栈strace pstack gstack
pstack PID gstack PID top -H -p PID 引子: 1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK ...
最新文章
- 智能调温需要哪些计算机知识,一种智能调温的计算机用鼠标的制作方法
- angular监听路由跳转
- kafka topic常用命令
- 甲骨文宣布供应链管理云平台支持LogFire仓库管理系统
- 安全生产六步法是什么_支塘镇探索“五步法”压紧压实出租厂房安全生产主体责任...
- R-CNN学习笔记4:Fast R-CNN
- 电脑中的cache文件夹可以删除吗?
- 什么是云计算中的SaaS(软件即服务)?
- protobuf中repeated类型变量与C++ vector类型变量的相互赋值方法
- 将一个对象转换成数组
- 基于FPGA的数字混频器设计与仿真
- 2023.04.22更新大麦网移动端/M端抢购软件和使用教程
- caffe 损失函数
- FFMPEG关于avio_alloc_context申请使用内存释放问题
- 裴蜀定理(或 贝祖定理 )
- 小程序 zoom_Zoom是否真正监视您在通话中使用的应用程序?
- 计算机用户名更改不了,分享简单几步解决win10电脑用户名改不了的问题
- python线性方程组求解_python求解方程组的三种方法
- 三菱mode bus tcp通讯_廊坊三菱MR-J4
- Java 实现 QQ 登陆