linux命令-- pstack命令(跟踪进程栈)
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命令(跟踪进程栈)相关推荐
- pstack 跟踪进程栈
pstack 跟踪进程栈 此命令可显示每个进程的栈跟踪.pstack 命令必须由相应进程的属主或 root 运行.可以使用 pstack 来确定进程挂起的位置.此命令允许使用的唯一选项是要检查的进程的 ...
- 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% ...
- Linux常用命令——pstack命令
在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) pstack 显示每个进程的栈跟踪 补充说明 pstack命令可显示每个进程的栈跟踪.pstack ...
- Linux工具快速上手,Linux很实用命令
Linux工具快速上手 前言 Linux下有很多命令行工具供我们使用,每个工具总是提供了大量参数供我们选择: 实际工作中,我们用到的工具,最常用的总是那么几个参数组合: 为此,我写了这本书相对实用的书 ...
- pstack 安装linux_pstack命令_Linux pstack 命令用法详解:显示每个进程的栈跟踪
pstack命令可显示每个进程的栈跟踪.pstack 命令必须由相应进程的属主或 root 运行.可以使用 pstack 来确定进程挂起的位置.此命令允许使用的唯一选项是要检查的进程的 PID. 命令 ...
- strace,ltrace linux下跟踪进程调用的命令
本工具可以用来做大多数排除,比如mount一个NFS,很慢,找不出原因,我们可以使用strace命令来跟中mount这个经常所有的调用过程. strace 命令是一种强大的工具,它能够显示所有由 ...
- 初步了解Linux strace 命令和跟踪进程产生的系统调用
strace strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切 ...
- linux 跟踪运行的进程,使用 Linux 的 strace 命令跟踪/调试程序的常用选项
在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用.当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行. 这个简单而又强大的工具几 ...
- 【Linux】一步一步学Linux——pstack命令(261)
00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 pstack命令可显示每个进程的栈跟踪.pstack 命令 ...
最新文章
- java设计模式---模板方法模式
- java ajax上传文件图片以json形式返回
- 怒爬某破 Hub 站资源,只为撸这个鉴黄平台!
- c语言程序设计橙皮,橙皮_中药词典C_中医中药网
- ubuntu 14.04 安装chrome及给chromium 安装 flash player
- python获取中文字体点阵坐标_Python实现点阵字体读取与转换的方法
- oss客户端工具_干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
- 为什么java什么意思_java – 什么意思是immutable?
- (紫书,感谢作者)第7章暴力求解法
- H.264技术及原理
- 单片空间后方交会程序c语言,摄影测量实习报告-单片空间后方交会
- 王者荣耀选手退役后转行Python,自学的那种!网友:中国版“阿甘”
- 3d建模网上学习靠谱吗?学3d建模哪个学校好?
- WIN10 的adobe flash player 在IE11中用不了
- Unity3D研究院之Unity中连接本地或局域网MySQL数据库
- PYTHON SELENIUM的学习笔记
- 图集谷-写真集-爬虫-1.0
- WORD分栏后左右都能编辑
- 物联网MQTT协议分析和开源Mosquitto部署验证
- jpg格式转pdf免费版