1 PStack 命令说明
pstack是一个shell脚本,用于打印正在运行的进程的栈跟踪信息,它实际上是gstack的一个链接,而gstack本身是基于gdb封装的shell脚本.。此命令可显示每个进程的栈跟踪。pstack 命令必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。
与jstack功相比, 它能对潜在的死锁予以提示, 而pstack只提供了线索, 需要gdb进一步的确定。
pstack是gdb的一部分,如果系统没有pstack命令,使用yum搜索安装gdb即可。
这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方;
2 操作示例
安装 gdb 会自带安装 pstack
[dave@www.cndba.cn ~]# yum install gdb –y
查看bash程序进程栈
[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命令组合后直接一条命令直接执行:
[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 ()
版权声明:本文为博主原创文章,未经博主允许不得转载。