zoukankan      html  css  js  c++  java
  • linux pstack命令总结

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

    [root@DB-Server ~]# man pstack
    PSTACK(1)                  Linux Programmer’s Manual                 PSTACK(1)
     
    NAME
           pstack - print a stack trace of a running process
     
    SYNOPSIS
           pstack pid
     
    DESCRIPTION
           pstack  attaches  to  the active process named by the pid on the command line, and prints out an execution stack trace.  If ELF symbols exist in the binary (usually the case
           unless you have run strip(1)), then symbolic addresses are printed as well.
     
           If the process is part of a thread group, then pstack will print out a stack trace for each of the threads in the group.
     
    SEE ALSO
           nm(1), ptrace(2), gdb(1)
     
    AUTHORS
           Ross Thompson <ross@whatsis.com>
     
           Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
     
    Red Hat Linux                     Dec 17 2004                        PSTACK(1)
    (END) 

    例如我们可以使用pstack命令来查看Oracle监听进程的栈跟踪,如下所示

    1: 首先找到监听进程的进程号

    [oracle@DB-Server~]$ ps -ef | grep lsn
     
    oracle 12027 11806 0 11:18 pts/1 00:00:00 grep lsn
     
    oracle 31440 1 0 Mar04 ? 00:01:41 /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER -inherit

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

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

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

    [oracle@DB-Server~]$ more lsn_pstack.log 
    #0  0x0000003c7d0cb65f in poll () from /lib64/libc.so.6
    #1  0x00007f82c63292e7 in ntevpque () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #2  0x00007f82c6326aab in ntevque () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #3  0x00007f82c62fc81e in nsevwait () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #4  0x00000000004108d9 in nsglma ()
    #5  0x0000000000405abd in main ()
    #0  0x0000003c7d0cb65f in poll () from /lib64/libc.so.6
    #1  0x00007f82c63292e7 in ntevpque () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #2  0x00007f82c6326aab in ntevque () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #3  0x00007f82c62fc81e in nsevwait () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #4  0x00000000004108d9 in nsglma ()
    #5  0x0000000000405abd in main ()
    #0  0x0000003c7d0cb65f in poll () from /lib64/libc.so.6
    #1  0x00007f82c63292e7 in ntevpque () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #2  0x00007f82c6326aab in ntevque () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #3  0x00007f82c62fc81e in nsevwait () from /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #4  0x00000000004108d9 in nsglma ()
    #5  0x0000000000405abd in main ()
    [oracle@DB-Server~]$ 
  • 相关阅读:
    openstack项目【day23】:glance基础
    openstack项目【day23】:openstack组件介绍
    openstack项目【day23】:云计算介绍(一)
    学习有五个层次和境界
    gdb 初步学习记录
    Linux samba 服务的配置
    QT 5.7.0 移植之 tslib 编译配置
    tiny4412 u-boot 启动参数的设置
    Windows 只能安装32位虚拟机问题
    Tiny4412 虚拟机交叉编译环境的设置以及编译u-boot 和 kernel
  • 原文地址:https://www.cnblogs.com/kerrycode/p/5249968.html
Copyright © 2011-2022 走看看