您的位置:首页 > 运维架构 > Linux

linux pstack命令总结

2016-03-07 11:50 597 查看
pstack命令用来显示进程的栈跟踪。pstack命令必须由相应进程的属主或root账号运行。可以使用pstack来确定进程挂起的位置。此命令只有一个参数,那就是pid,具体关于pstack的介绍可以查看man手册,如下所示:

[root@DB-Server~]#manpstack
PSTACK(1)LinuxProgrammer’sManualPSTACK(1)
NAME
pstack-printastacktraceofarunningprocess
SYNOPSIS
pstackpid
DESCRIPTION
pstackattachestotheactiveprocessnamedbythepidonthecommandline,andprintsoutanexecutionstacktrace.IfELFsymbolsexistinthebinary(usuallythecase
unlessyouhaverunstrip(1)),thensymbolicaddressesareprintedaswell.
Iftheprocessispartofathreadgroup,thenpstackwillprintoutastacktraceforeachofthethreadsinthegroup.
SEEALSO
nm(1),ptrace(2),gdb(1)
AUTHORS
RossThompson<ross@whatsis.com>
RedHat,Inc.<http://bugzilla.redhat.com/bugzilla>
RedHatLinuxDec172004PSTACK(1)
(END)

例如我们可以使用pstack命令来查看Oracle监听进程的栈跟踪,如下所示
1:首先找到监听进程的进程号

[oracle@DB-Server~]$ps-ef|greplsn
oracle1202711806011:18pts/100:00:00greplsn
oracle3144010Mar04?00:01:41/u01/app/oracle/product/10.2.0/db_1/bin/tnslsnrLISTENER-inherit

2:将监听进程的栈跟踪信息写入文件lsn_pstack.log

[oracle@DB-Server~]$pstack31440>>lsn_pstack.log
[oracle@DB-Server~]$pstack31440>>lsn_pstack.log
[oracle@DB-Server~]$pstack31440>>lsn_pstack.log
[oracle@DB-Server~]$

3:如下所示,我们可以看到函数调用关系为:main->nsglma->nsevwait->ntevque->ntevpque->poll.

[oracle@DB-Server~]$morelsn_pstack.log
#00x0000003c7d0cb65finpoll()from/lib64/libc.so.6
#10x00007f82c63292e7inntevpque()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#20x00007f82c6326aabinntevque()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#30x00007f82c62fc81einnsevwait()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#40x00000000004108d9innsglma()
#50x0000000000405abdinmain()
#00x0000003c7d0cb65finpoll()from/lib64/libc.so.6
#10x00007f82c63292e7inntevpque()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#20x00007f82c6326aabinntevque()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#30x00007f82c62fc81einnsevwait()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#40x00000000004108d9innsglma()
#50x0000000000405abdinmain()
#00x0000003c7d0cb65finpoll()from/lib64/libc.so.6
#10x00007f82c63292e7inntevpque()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#20x00007f82c6326aabinntevque()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#30x00007f82c62fc81einnsevwait()from/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
#40x00000000004108d9innsglma()
#50x0000000000405abdinmain()
[oracle@DB-Server~]$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: