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~]$ 
相关文章
|
12天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
23小时前
|
Linux
Linux的strings命令如何使用?
【6月更文挑战第3天】Linux的strings命令如何使用?
11 4
|
4天前
|
Linux 应用服务中间件 nginx
linux小技巧: 可以补全命令 别名永久有效
linux小技巧: 可以补全命令 别名永久有效
|
4天前
|
缓存 关系型数据库 MySQL
linux 基本知识与命令
linux 基本知识与命令
|
4天前
|
网络协议 Linux 数据库
蓝易云 - Linux常用命令dhcpd命令
在使用dhcpd命令之前,需要确保已经正确配置了dhcpd.conf文件,该文件定义了DHCP服务器的行为和要分配的IP地址范围等信息。
10 0
|
4天前
|
Linux Docker 容器
蓝易云 - 【Linux】如何在linux系统重启或启动时执行命令或脚本(也支持docker容器内部)
以上就是在Linux系统和Docker容器中设置启动时运行命令或脚本的方法。希望对你有所帮助。
18 0
|
5天前
|
Linux 开发工具
蓝易云 - Linux虚拟机常用命令
以上就是一些常用的Linux命令,希望对你有所帮助。
18 0
|
6天前
|
存储 Linux 开发工具
Linux 基础(从环境搭建到基础命令)
Linux 基础(从环境搭建到基础命令)
|
8天前
|
存储 Linux 网络安全
在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)
SSH远程执行命令时遇到“命令未找到”问题,原因是Linux登录方式不同导致环境变量加载差异。解决方案:将环境变量写入`/etc/profile.d/`下的文件,或手动在命令前加载环境变量,如`source /etc/profile`。
|
10天前
|
关系型数据库 MySQL Java
1.Linux常用命令
1.Linux常用命令
36 1