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的一个功能封装, 但其实现的功能, 确实非常实用

linux gstack pstack 进程运行堆栈查看工具相关推荐

  1. pstack 安装linux_linux下的进程堆栈查看工具pstack

    pstack在linux上是一个非常有用的工具,可以查看进程内部调用函数的信息.可惜的是在ubuntu10.10版本中没有找到这个工具.无奈,只能下载尝试编译了. 首先安装编译环境,使用如下命令: a ...

  2. Linux 如何创建进程函数与查看进程

    进程创建函数 进程就是pcb,意味着创建一个进程,就是创建一个pcb pid_t fork(void) –通过复制调用进程(父进程)创建一个新的进程(子进程) 创建一个新的pcb,然后从父进程pcb中 ...

  3. Linux下多线程堆栈查看工具(pstree、ps、pstack)

    原文:http://blog.csdn.net/yfkiss/article/details/6729364 1. pstree pstree以树结构显示进程 $ pstree -p work | g ...

  4. linux 进程占用cpu查看工具,Linux下如何查看某一进程的CPU占用率

    /proc下每个进程有一个目录,目录下的stat文件可以得到关于该进程的信息,比如: # cat /proc/2122/stat 2122 (sshd) S 6599 2122 2122 0 -1 8 ...

  5. linux常用查看进程,Linux常用的进程管理和查看指令

    &背景工作做符 ctrl+z暂停 ctrl + c 停止 jobs  [-l(list) , r(running jobs) ,-s(stop jobs)]  观察背景工作的状态 fg  %j ...

  6. Linux 0.11进程运行轨迹的跟踪,进程运行轨迹的跟踪与统计

    1,到内核init/main.c下修改信息:(cd/oslab/oslab/linux-0.11/init) 2,向kernel/printk.c中添加打印日志的功能 注意,是在源文件下增加代码: 3 ...

  7. linux上json文件格式化的查看工具jq

    0.引用 reference1 1.下载 https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz 2.安装 tar ...

  8. Linux进制查看工具:od、hexdump、xxd

    od 命令 :http://man.linuxde.net/od od 命令 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常使用od命令查看特殊格式的 ...

  9. Linux下排查进程占用cpu高的问题

    相信很多C++程序员都经历程序占用cpu过高的问题,这种问题,如果对代码运行逻辑足够熟悉,只靠脑子想估计定位起来也不难,但是如果是调用第三方sdk,或者团队其他人开发的库导致的cpu占用居高,就不那么 ...

最新文章

  1. 建立计算机系学生视图,实验六 视图的操作.doc
  2. ListModel QML类型
  3. Introduction to the Optimizer --cbo
  4. navicat premium 连接出现的问题
  5. [导入].Net 中处理Word(2007)文档的一种方法
  6. linux下postgresql离线编译安装
  7. Synology DS213J 群晖NAS git server架设方法!
  8. [原创]使用 Google Chart 在线服务实现软件版本发布时间线图
  9. FFmpeg入门详解之74:FFmpeg转码器Java版之需求规格说明书
  10. Java多线程编程-(17)-多线程异步调用之Future模式
  11. 汽车电子之NFC技术
  12. PS线条神器插件Lazy Nezumi Pro(能画出sai般的线条)
  13. 怎么增加淘宝店铺标签权重
  14. nextpolish安装_使用nextpolish对三代组装进行polish
  15. 【STM32】HAL库-备份寄存器(BKP)
  16. HTML 笔记/案例
  17. 我的世界服务器无法发送聊天信息,我的世界聊天框指令传送 | 手游网游页游攻略大全...
  18. 数据仓库面试题-初级
  19. 信息系统项目管理师-项目范围管理
  20. B. Patchouli‘s Magical Talisman #796 div2

热门文章

  1. Linux内核移植之三:内核配置选项
  2. Keil编译Entry point (0x00100000) lies outside the image.错误
  3. 从源码带你看懂functools的partial方法
  4. 30天敏捷生活(9-11):调整30天的节奏
  5. 我脑中飘来飘去的css魔幻属性
  6. 有人买不?没人的话我待会儿再来问问 价值6.11亿美元的入侵工具无人问津
  7. [20170513]update结果集.txt
  8. Apache 启动提示undefined symbol: libiconv_open
  9. php-fpm 参数及配置详解
  10. Lungo transition in reverse direction. 反转效果