pstack是一个shell脚本,用于打印正在运行的进程的栈跟踪信息,它实际上是gstack的一个链接,而gstack本身是基于gdb封装的shell脚本.。此命令可显示每个进程的栈跟踪。pstack 命令必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。

与jstack功相比, 它能对潜在的死锁予以提示, 而pstack只提供了线索, 需要gdb进一步的确定。

pstack是gdb的一部分,如果系统没有pstack命令,使用yum搜索安装gdb即可。

这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方;

ubuntu下安装命令:

sudo apt install pstack

示例1:查看bash程序进程栈

/opt/app/tdev1$ps -fe| grep bash
tdev1   7013  7012  0 19:42 pts/1    00:00:00 -bash
tdev1  11402 11401  0 20:31 pts/2    00:00:00 -bash
tdev1  11474 11402  0 20:32 pts/2    00:00:00 grep bash
/opt/app/tdev1$pstack 7013
#0  0x00000039958c5620 in __read_nocancel () from /lib64/libc.so.6
#1  0x000000000047dafe in rl_getc ()
#2  0x000000000047def6 in rl_read_key ()
#3  0x000000000046d0f5 in readline_internal_char ()
#4  0x000000000046d4e5 in readline ()
#5  0x00000000004213cf in ?? ()
#6  0x000000000041d685 in ?? ()
#7  0x000000000041e89e in ?? ()
#8  0x00000000004218dc in yyparse ()
#9  0x000000000041b507 in parse_command ()
#10 0x000000000041b5c6 in read_command ()
#11 0x000000000041b74e in reader_loop ()
#12 0x000000000041b2aa in main ()

或者类似这样执行

$ sudo pstack $(pgrep -uroot php-fpm)
[sudo] password for guanyy:
#0  0x000000380d8e86f3 in __epoll_wait_nocancel () from /lib64/libc.so.6
#1  0x00000000007ec4a4 in fpm_event_epoll_wait ()
#2  0x00000000007e1517 in fpm_event_loop ()
#3  0x00000000007dc887 in fpm_run ()
#4  0x00000000007e3bd8 in main ()

实例2:ps -eLo pid,lwp,pcpu |grep pid

利用一个最简单的命令就能够定位到哪段程序可能存在性能问题:获取进程ID,通过pstack命令查看里边的各个线程id以及对应的线程现在正在做什么事情,分析多组数据就可以获得哪些线程里有慢操作影响了服务器的性能,从而得到解决方案

由此可以判断出来在LWP 30222这个线程产生了性能问题,执行时间长达31.4毫秒的时间,再观察无非就是下面的几个语句出现的问题,只需要简单排查就知道了问题瓶颈。

本地线程ID

"NativeThread ID"所指的本地线程是指该java虚拟机所对应的虚拟机中的本地线程,java代码是依附于java虚拟机的本地线程执行的,当启动一个线程时,是创建一个native本地线程,本地线程才是真实的线程实体,为了更加深入理解本地线程和java线程的关系,可以通过以下方式将java虚拟机的本地线程打印出来:
1、试用ps -ef|grep java 获得java进行id
2、试用pstack<java pid> 获得java虚拟机本地线程的堆栈
从操作系统打印出来的虚拟机的本地线程看,本地线程数量和java线程数量是相同的,说明二者是一一对应的关系。
那么本地线程号如何与java线程堆栈文件对应起来呢,每一个线程都有tid,nid的属性。----dump文件中每个线程的nid值。

linux命令-- pstack命令(跟踪进程栈)相关推荐

  1. pstack 跟踪进程栈

    pstack 跟踪进程栈 此命令可显示每个进程的栈跟踪.pstack 命令必须由相应进程的属主或 root 运行.可以使用 pstack 来确定进程挂起的位置.此命令允许使用的唯一选项是要检查的进程的 ...

  2. LINUX ltrace命令-用来跟踪进程调用库函数的情况学习

    参考链接: http://www.bluestep.cc/linux-ltrace%E5%91%BD%E4%BB%A4-%E7%94%A8%E6%9D%A5%E8%B7%9F%E8%B8%AA%E8% ...

  3. Linux常用命令——pstack命令

    在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) pstack 显示每个进程的栈跟踪 补充说明 pstack命令可显示每个进程的栈跟踪.pstack ...

  4. Linux工具快速上手,Linux很实用命令

    Linux工具快速上手 前言 Linux下有很多命令行工具供我们使用,每个工具总是提供了大量参数供我们选择: 实际工作中,我们用到的工具,最常用的总是那么几个参数组合: 为此,我写了这本书相对实用的书 ...

  5. pstack 安装linux_pstack命令_Linux pstack 命令用法详解:显示每个进程的栈跟踪

    pstack命令可显示每个进程的栈跟踪.pstack 命令必须由相应进程的属主或 root 运行.可以使用 pstack 来确定进程挂起的位置.此命令允许使用的唯一选项是要检查的进程的 PID. 命令 ...

  6. strace,ltrace linux下跟踪进程调用的命令

     本工具可以用来做大多数排除,比如mount一个NFS,很慢,找不出原因,我们可以使用strace命令来跟中mount这个经常所有的调用过程. strace 命令是一种强大的工具,它能够显示所有由 ...

  7. 初步了解Linux strace 命令和跟踪进程产生的系统调用

    strace strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切 ...

  8. linux 跟踪运行的进程,使用 Linux 的 strace 命令跟踪/调试程序的常用选项

    在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用.当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行. 这个简单而又强大的工具几 ...

  9. 【Linux】一步一步学Linux——pstack命令(261)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 pstack命令可显示每个进程的栈跟踪.pstack 命令 ...

最新文章

  1. java设计模式---模板方法模式
  2. java ajax上传文件图片以json形式返回
  3. 怒爬某破 Hub 站资源,只为撸这个鉴黄平台!
  4. c语言程序设计橙皮,橙皮_中药词典C_中医中药网
  5. ubuntu 14.04 安装chrome及给chromium 安装 flash player
  6. python获取中文字体点阵坐标_Python实现点阵字体读取与转换的方法
  7. oss客户端工具_干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
  8. 为什么java什么意思_java – 什么意思是immutable?
  9. (紫书,感谢作者)第7章暴力求解法
  10. H.264技术及原理
  11. 单片空间后方交会程序c语言,摄影测量实习报告-单片空间后方交会
  12. 王者荣耀选手退役后转行Python,自学的那种!网友:中国版“阿甘”
  13. 3d建模网上学习靠谱吗?学3d建模哪个学校好?
  14. WIN10 的adobe flash player 在IE11中用不了
  15. Unity3D研究院之Unity中连接本地或局域网MySQL数据库
  16. PYTHON SELENIUM的学习笔记
  17. 图集谷-写真集-爬虫-1.0
  18. WORD分栏后左右都能编辑
  19. 物联网MQTT协议分析和开源Mosquitto部署验证
  20. jpg格式转pdf免费版

热门文章

  1. Segment fault之痛
  2. AspectJ的实现机制
  3. 各种拿webshell
  4. App设计灵感之十二组精美的插画引导页设计案例
  5. RxSwift之深入解析dispose源码的实现原理
  6. MySQL之某个表中有近千万数据且CRUD访问缓慢的优化处理
  7. BASIC-4 数列特征
  8. 【机器视觉】 fuzzy_measure_pairing算子
  9. 【Linux系统编程】IO多路复用之poll
  10. mysql 基本配置_MySQL 基本配置