签到成功

知道了

CNDBA社区CNDBA社区

linux pstack命令 跟踪进程栈

2022-10-11 09:51 1342 0 原创 Linux
作者: dave

1 PStack 命令说明

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

http://www.cndba.cn/dave/article/108696
http://www.cndba.cn/dave/article/108696

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

pstack是gdb的一部分,如果系统没有pstack命令,使用yum搜索安装gdb即可。http://www.cndba.cn/dave/article/108696

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

http://www.cndba.cn/dave/article/108696

2 操作示例

安装 gdb 会自带安装 pstackhttp://www.cndba.cn/dave/article/108696

[dave@www.cndba.cn ~]# yum install gdb –y

查看bash程序进程栈http://www.cndba.cn/dave/article/108696

[dave@www.cndba.cn ~]# ps -ef|grep smon
oracle    343392       1  0 10月10 ?      00:00:00 ora_smon_orcl
root      359541  358997  0 09:36 pts/2    00:00:00 grep smon
[dave@www.cndba.cn ~]#

[dave@www.cndba.cn ~]# pstack 343392
#0  0x00007fb6bb3ac06a in semtimedop () from /lib64/libc.so.6
#1  0x0000000010f3b486 in sskgpwwait ()
#2  0x0000000010f38ac8 in skgpwwait ()
#3  0x00000000109fcc14 in ksliwat ()
#4  0x00000000109fbf95 in kslwaitctx ()
#5  0x00000000016e64bc in ktmmon_do_wait ()
#6  0x00000000016ddf29 in ktmmon ()
#7  0x00000000016dd4ba in ktmSmonMain ()
#8  0x00000000032774a7 in ksbrdp ()
#9  0x00000000035f81e1 in opirip ()
#10 0x0000000001e68ada in opidrv ()
#11 0x0000000002a3caa1 in sou2o ()
#12 0x0000000000d05dba in opimai_real ()
#13 0x0000000002a477e1 in ssthrdmain ()
#14 0x0000000000d05cc6 in main ()

或者使用pgrep命令组合后直接一条命令直接执行:

http://www.cndba.cn/dave/article/108696
http://www.cndba.cn/dave/article/108696

[dave@www.cndba.cn ~]# pgrep ora_smon_orcl
359699
[dave@www.cndba.cn ~]# ps -ef|grep 359699
oracle    359699       1  0 09:38 ?        00:00:00 ora_smon_orcl
root      360716  358997  0 09:38 pts/2    00:00:00 grep 359699


[dave@www.cndba.cn ~]# pstack $(pgrep ora_smon_orcl)
#0  0x00007f6dfa3cf06a in semtimedop () from /lib64/libc.so.6
#1  0x0000000010f3b486 in sskgpwwait ()
#2  0x0000000010f38ac8 in skgpwwait ()
#3  0x00000000109fcc14 in ksliwat ()
#4  0x00000000109fbf95 in kslwaitctx ()
#5  0x00000000016e64bc in ktmmon_do_wait ()
#6  0x00000000016ddf29 in ktmmon ()
#7  0x00000000016dd4ba in ktmSmonMain ()
#8  0x00000000032774a7 in ksbrdp ()
#9  0x00000000035f81e1 in opirip ()
#10 0x0000000001e68ada in opidrv ()
#11 0x0000000002a3caa1 in sou2o ()
#12 0x0000000000d05dba in opimai_real ()
#13 0x0000000002a477e1 in ssthrdmain ()
#14 0x0000000000d05cc6 in main ()

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7965938次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ