作者 | JiekeXu

来源 | JiekeXu之路(ID: JiekeXu_IT)

转载请联系授权 | (微信ID:xxq1426321293)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天分享下 Linux 下的 pstack 工具安装及简单应用。本文首发于微信公众号【JiekeXu之路】,欢迎点击上方蓝字关注我吧!

原本想着使用 pstack 命令监控一下监听日志可没想到,Linux 系统默认没有这个命令。RedHat 公司发行的 Linux 操作系统(RHEL,CentOS等等)虽提供了 pstack 工具,但要安装 gdb。

安装 gdb 会自带安装 pstack ,那先不管了,配置好本地 yum 源试试吧。

yum install gdb -y

查看 pstack 是指向了 gstack 的符号链接。再看一下 gstack:

[root@JiekeXu ~]# cat /usr/bin/gstack
#!/bin/shif test $# -ne 1; thenecho "Usage: `basename $0 .sh` <process-id>" 1>&2exit 1
fiif test ! -r /proc/$1; thenecho "Process $1 not found." 1>&2exit 1
fi# GDB doesn't allow "thread apply all bt" when the process isn't
# threaded; need to peek at the process to determine if that or the
# simpler "bt" should be used.backtrace="bt"
if test -d /proc/$1/task ; then# Newer kernel; has a task/ directory.if test `/bin/ls /proc/$1/task | /usr/bin/wc -l` -gt 1 2>/dev/null ; thenbacktrace="thread apply all bt"fi
elif test -f /proc/$1/maps ; then# Older kernel; go by it loading libpthread.if /bin/grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; thenbacktrace="thread apply all bt"fi
fiGDB=${GDB:-/usr/bin/gdb}# Run GDB, strip out unwanted noise.
# --readnever is no longer used since .gdb_index is now in use.
$GDB --quiet -nx $GDBARGS /proc/$1/exe $1 <<EOF 2>&1 |
set width 0
set height 0
set pagination no
$backtrace
EOF
/bin/sed -n \-e 's/^\((gdb) \)*//' \-e '/^#/p' \-e '/^Thread/p'
  • 脚本要求一个参数:进程 ID。

  • 然后通过检测 /proc 目录下进程子目录是否可读,来查看相应进程是否存在。

  • 如果进程只有一个线程,那么使用 gdb 的 “bt” 命令打印线程堆栈信息,否则使用 “thread apply all bt” 命令。

  • 最后调用 gdb,使用 “bt” 或 “thread apply all bt” 命令,并把输出重定向到 sed 工具,由 sed 工具打印出线程堆栈信息。

下面我们使用 pstack 跟踪一下 监听日志进程。

最后也使用操作系统跟踪命令跟踪 sqlplus 连接过程,从而观察跟踪文件。要是没有 strace 也需要安装一下。

yum install -y strace

Linux 系统的跟踪命令:

strace -o /tmp/sqlplus.log -T -tt -e trace=all  sqlplus / as sysdba

然后使用 tkprof 格式化一下 strace 文件,便可以看到一些有用的信息,我这里没有问题,故格式化后输出也很简单。

tkprof 文件名 -output 文件名
cat 文件名

当然也可以使用 strace 加进程 pid 输出堆栈信息,不过就是不太友好,不容易看懂。

strace -t -p 31706

注意:HPUnix、AIX 跟踪 sqlplus 进程使用如下命令:
truss -dfaie -o /tmp/truss.log sqlplus / as sysdba

以前也使用 truss 命令解决过一登陆缓慢问题:SQLPLus 登陆 RAC 11.2.0.4 数据库缓慢问题完美解决方案,感兴趣的小伙伴可以查看。


———————————————————————————
腾讯云:https://cloud.tencent.com/developer/user/5645107
墨天轮:https://www.modb.pro/u/4347
CSDN:https://blog.csdn.net/JiekeXu
公众号:JiekeXu之路
————————————————————————————

好了,今天就先到这里了,小伙伴们再见了。写作不易,此文如果对你有帮助,请支持“在看”与转发,您的支持便是我不断写作的最大的动力,实在吝啬点个赞也行哈,微信公众号以前的点赞又回来了,加油,让我们一起努力做更好的自己!

Oracle 12c 及以上版本补丁更新说明及下载方法(收藏版)

Oracle 19c 之多租户 PDB 连接与访问(三)

Oracle 12C 最新补丁下载与安装操作指北

关于 Oracle ACFS 相关知识的简单学习

Oracle 相关认证证书查询及真伪辨别

点亮在看,你最好看!

Linux 下的 pstack 工具安装及简单应用相关推荐

  1. linux下mysql可视化工具安装

    之前是一直用shell交互界面,但是最近频繁地检查数据库中的数据感觉特别麻烦,便装了一个可视化工具. 安装: $ sudo apt-get install mysql-workbench [sudo] ...

  2. Linux下RocketMq可视化工具安装

    1.下载可视化工具包 下载地址:GitHub - apache/rocketmq-externals: Mirror of Apache RocketMQ (Incubating) 2.将下载的工具包 ...

  3. Linux下的parted工具的使用 GPT分区安装系统

    安装系统是安装前时候ctrl+atl+F2 fdisk -l parted select /dev/sdb mklabel msdos # 将GPT磁盘格式化为MBR磁盘 对大硬盘进行分区 xfs 和 ...

  4. Linux下开源打包工具fpm的安装与使用(超详细)

    Linux下开源打包工具fpm的安装与使用 一.fpm概述 二.fpm的安装 1.安装ruby环境 2.安装fpm 三.fpm的使用 1.fpm常用参数 2.举例要求 3.准备目录 4.编写脚本文件 ...

  5. Linux下C++开发工具介绍

    概述     就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...

  6. Linux下暴力破解工具Hydra详解

    Linux下暴力破解工具Hydra详解 一.简介 Number one of the biggest security holes are passwords, as every password s ...

  7. linux下python3源码安装及卸载

    Linux下Python3的源码编译安装和卸载方法 [日期:2019-06-21] 来源:博客园  作者:wuli潇萧 [字体:大 中 小] (一)Linux下软件的源码编译安装和卸载方法 Linux ...

  8. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

  9. python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))

    Python介绍. Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分 ...

最新文章

  1. Docker是世界上最牛逼的CaaS!
  2. (2)搞一搞 seata 之 Spring Cloud 整合
  3. win7 64+python2.7.12安装numpy+scipy+matplotlib+scikit-learn
  4. 3月19 HTML静态网页的制作
  5. Sueetie源代码发布【 推荐 】
  6. 亲身经历:如何判断一个字符在a/z之前?
  7. ai驱动数据安全治理_利用AI驱动的自动协调器实时停止有毒信息
  8. 【知识图谱系列】基于Randomly Perturb的图谱预训练模型GraphCL
  9. 利用Gazebo搭建赛道,控制小车完成比赛(大学生智能车大赛室外光电组赛道仿真模拟)
  10. word整个表格首行缩进_word表格怎么首行缩进 word表格内容缩进
  11. Latex VS Code 编辑中文Latex乱码——详细解决方案操作流程
  12. 摇篮式五轴与主轴摆动式五轴加工中心的区别
  13. element-ui表格表头内容 限制不换行
  14. 7-154 置点不动产——认真学习,努力工作买买房子吧
  15. xz2p更新android 9,索尼 XZ2 迎来安卓 9.0 更新,但少了全面屏手势
  16. 教你用人工智能写文章写歌词写对联
  17. 同花顺l2数据接口到底有什么用?
  18. Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声
  19. 北京大兴区强关私立幼儿园 致数千儿童无学可上
  20. 小红年龄是小梅的5倍c语言,5.四年级奥数-年龄问题.doc

热门文章

  1. udp 与 tcp 通信编程
  2. Spark 的共享变量之累加器和广播变量
  3. Kinect深度图与摄像头RGB的标定与配准(文末总结不容错过)
  4. spss基础-5.10
  5. python爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取上千条新闻
  6. 【web项目】任务倒计时网页
  7. libjpeg库使用
  8. 通俗理解ip地址,子网掩码,网关
  9. 线性代数:线性方程求解、矩阵的逆、线性组合、线性独立
  10. kube-scheduler源码分析(五)之 PrioritizeNodes