pstack使用和原理

article/2025/10/5 16:41:54

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

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

  


http://chatgpt.dhexx.cn/article/pbM04irH.shtml

相关文章

RDMA RC UC UD

RC:面向连接的可靠服务 UC:面向连接的不可靠服务 UD:面向数据报的不可靠服务 面向连接 vs 面向数据报 相同点&#xff1a;两者的通信均包括双方QP对的参与 不同点&#xff1a;面向连接的通信若有N个节点与之通信&#xff0c;本机需要N个QP对&#xff1b; 面向数据报的通信…

WiFi 芯片原厂、模组厂 一文看懂IOT WiFi选择

一&#xff1a;国内常用WiFi原厂 瑞昱 RTL8710、乐鑫 ESP8266、德州仪器 TI cc3200、紫光展锐RDA5981、新干线NL6621、联发科 MT7681、高通 QCA4004。 博通Broadcom Corporation 博通是Wi-Fi芯片一哥&#xff0c;作为领先的半导体厂商&#xff0c;博通在无线领域的优势有目共睹…

51单片机系列--AD/DA

介绍 AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号 DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换为模拟信号 计算机系统是一…

RDA5981开发环境安装

满满的到处是坑~~ 一&#xff1a;Keil MDK 安装 1.安装KEIL MDK 5.24a版本以及破解。 2.添加环境变量&#xff1a;C:\Keil_v5\ARM\ARMCC\bin 二&#xff1a;GCC-ARM交叉编译安装 1.从 https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads 下载最新版本 win7…

8259A简介

文章目录 1中断简介1.1中断1.2禁止中断与中断屏蔽1.3中断嵌套1.4中断类型号和中断向量表 2,8259A简介2.1 8259A介绍2.2 8259A内部结构2.3 8259A引脚2.3.1 与CPU相连的引脚2.3.2 与外设相连的引脚 2.4 8259a可编程寄存器 1中断简介 1.1中断 定义&#xff1a;CPU暂停当前程序的…

RTL8201-RMII电路

本文分享一下RTL8201如何用作RMII电路&#xff0c;无需外部晶体&#xff0c;时钟由主芯片产生。 RTL8201是常用的百兆电流型PHY&#xff0c;支持端口自动翻转&#xff08;AUTO MDIX&#xff09;&#xff0c;如下框图 RMII相对MII来说&#xff0c;连接线更少&#xff0c;MII需要…

RDMA 、RoCE 、IB 、TCP、Ethernet

ROCE ROCE&#xff08;Remote Direct Memory Access over Converged Ethernet&#xff09;是一种网络技术&#xff0c;它结合了RDMA&#xff08;远程直接内存访问&#xff09;和以太网交换机的特性。ROCE允许主机之间通过以太网进行高效的直接内存访问&#xff0c;从而提供低延…

RTD2785T RTD2785R 2K eDP屏驱动芯片介绍

RTD2785T 支持VGA2HDMI2DP转eDP&LVDS 2K分辨率 支持按键菜单和Uart串口通信&#xff0c;用于工控MCU通过uart指令调节参数 文章转载&#xff1a; RTD2785T 2HDMI2DP转eDP&LVDS 2K方案设计-易显方案设计 (rtddisplay.com)

【RDMA】15. RDMA之RoCE Soft-RoCE

【RDMA】RDMA 学习资料总目录_bandaoyu的笔记-CSDN博客SavirRDMA 分享1. RDMA概述https://blog.csdn.net/bandaoyu/article/details/112859853https://zhuanlan.zhihu.com/p/1388747382. 比较基于Socket与RDMA的通信https://blog.csdn.net/bandaoyu/article/details/1128613993…

Uva509 RAID

我在这题卡了一天&#xff0c;心态有点小崩。不过最后AC的时候还是很开心的。 坑点&#xff1a;1.注意当两个及以上disc无法读取时&#xff0c;输入不合法。 2.当校验结果与预期ans不同时&#xff0c;输入不合法。 其它都为合法情况。 当合法时&#xff0c;校验块不能作为数据…

百度dueros人工智能-RDA5981(R01开发板)-学习心得-安装SDK(dueros的MbedOS系统)

R01开发板的代码及功能测试需要安装SDK才能正常测试,我们需要了解一点MbedOS系统的基本知识及R01开放板的硬件知识才能开始安装SDK的工作。 1.Mbed OS基础知识 Mbed OS是一个开放源码操作系统,专门用于为物联网(IoT)设备设计的ARM微控制器的平台:需要连接到互联网的低功率、…

百度dueros人工智能-RDA5981(R01开发板)-学习心得-入门及硬件连接

一.入门及硬件连接 自从2017年12月10号收到在深圳比特跳动技术有限公司的淘宝网上购买的百度dueros人工智能-R01开发板,当拆开快递包裹的时候,我本以为可以到手就玩,结果当场就懵了,配件如下图所示: 配件从左到右分别是MIC语音输入,天线,发声喇叭,R01开放板。看见这四…

从RDA5981A/B/C编译后map文件和datasheet分析内存分配情况

先查看RDA5981的datasheet, 如下图,RDA5981芯片内部有三个RAM区域, I_SRAM,D_SRAM,I_cache, 还可以外挂PSRAM, 内存映射图解释: 在编译目录BUILD\UNO_81C\GCC_ARM\找到*.map文件, 可以搜索到如下地址情况: .data 0x00100080 .bss 0x001017a8 .stack …

RDA5981开发环境搭建

最近有商家在卖带有CC2530 Zigbee模块的板子&#xff08;电子垃圾&#xff09;&#xff0c;我对Zigbee还不是特别感冒&#xff08;没时间研究&#xff09;&#xff0c;倒是看中了同一个板子上的RDA5981模块。我这个人有个特点&#xff0c;没有研究明白的东西&#xff0c;不会轻…

Apache添加PHP模块重启apache服务报错

根据网上教程&#xff0c;在Apache中添加php模块&#xff1a; LoadModule php7_module C:\Program Files\php\php-7.3.4-Win32-VC15-x64\php7apache2_4.dll AddType application/x-httpd-php .php LoadModule php7_module modules/libphp7.so PHPIniDir C:\Program Files\php\…

linux上apache目录在哪,Linux下Apache目录明细

与Apache服务器相关的重要目录和文件如下&#xff1a; /etc/httpd/是Apache服务器的根目录 /etc/httpd/conf/httpd.conf是Apache服务器的主配置文件&#xff0c;其中包含指定文档root的配置 /var/www/html/是Apache服务器的文档根目录 /etc/init.d/httpd是Apache服务器启动脚本…

windows下apache简单配置php解释器

目录 1. apache部署 1.1. 下载安装包 1.2 安装 1.3 文件配置 1.4 进入cmd&#xff0c;执行httpd -k install -n apache 1.5 服务启动 1.6 服务验证 1.7 apache服务搭建至此结束。 2. php环境部署 2.1 php包下载 2.2 添加环境变量 3. apache下加载php解释器 3.1 编写…

宝塔面板定时重启apache、mysql、php5.6等Shell命令

定时重启apache service httpd restart 定时重启mysql service mysqld restart 定时重启php5.6 service php-fpm-56 restart 定时重启php5.7 service php-fpm-72 restart 还有一种定时重启php5.6的方法 /etc/init.d/php-fpm-56 restart 停止推送 php /www/wwwroot/y…

linux环境下,重启Apache服务httpd出现以下错误

重点查看红线圈出的错误信息 之后修改配置/etc/httpd/conf/httpd.conf未见&#xff0c;由错误信息已知是文件的355行组织了它重启&#xff0c;所以只需将其注释掉或者删掉即可。 保存文件 重新启动即可

重启apache下php,怎么重启apache

怎么重启apache&#xff1f; windows下重启Apache ● 首先右击“此电脑”&#xff0c;点击“管理”&#xff1b; ● 在打开的“计算机管理”程序中&#xff0c;双击“服务和应用程序”。 ● 在打开的“计算机管理”程序中&#xff0c;双击“服务”。 ● 在所有的服务列表中&…