Linux pstack命令[通俗易懂]

Linux pstack命令[通俗易懂]概要打印运行进程的栈信息(快照),包括一个进程下的所有线程的栈信息。语法pstackpid解释pstack是封装了gdb功能的shell脚本,通过”threadapplyallbt”的命令获得输出所有的线程堆栈信息,再用sed进行替换和过滤#RunGDB,stripoutunwantednoise.$GDB–quiet$readnever-nx/proc/$1/exe$1<<EOF2>&1|

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

概要

打印运行进程的栈信息(快照),包括一个进程下的所有线程的栈信息。

语法

pstack pid

解释

pstack是封装了 gdb 功能的 shell 脚本,通过 ” thread apply all bt ” 的命令获得输出所有的线程堆栈信息,再用 sed 进行替换和过滤

# Run GDB, strip out unwanted noise.
$GDB --quiet $readnever -nx /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'

用处

通常在服务运行不符合预期时,可以使用 pstack 来确定进程挂起的位置。比如因为死锁导致服务不响应了,使用该命令会找到照成死锁的代码位置。另一个常见的case是定位死循环,可以在同一时间段内多次执行pstack命令,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方

线程执行的时间

如果我们想要查询某一线程已经运行的时间,可以使用以下命令来完成

ps -eLo pid,lwp,pcpu |grep tid

这样可以定位出一些执行得比较慢的线程

参考文献

1、https://www.cnblogs.com/chenxinshuo/p/11986858.html

2、https://www.cnblogs.com/kongzhongqijing/articles/7685699.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193893.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于platform_device一些讲解「建议收藏」

    关于platform_device一些讲解「建议收藏」从2.6版本开始引入了platform这个概念,在开发底层驱动程序时,首先要确认的就是设备的资源信息,例如设备的地址,在2.6内核中将每个设备的资源用结构platform_device来描述,该结构体定义在kernel\include\linux\platform_device.h中:structplatform_device{constchar*name;u32id;structdevicedev;u32num_resources;structresou

    2022年7月24日
    8
  • UDP协议解析

    UDP协议解析????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????UDP协议简介UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI(OpenSystemInt

    2022年6月7日
    42
  • restful 幂等性(什么是幂次法则)

    理解RESTful的幂等性,并且设计符合幂等规范的高质量RESTfulAPI。怎么理解幂等性HTTP幂等方法,是指无论调用多少次都不会有不同结果的HTTP方法。不管你调用一次,还是调用一百次,一千次,结果都是相同的。还是以之前的博文的例子为例。【GET】/users#查询用户信息列表【GET】/users/1…

    2022年4月10日
    68
  • Qt中操作SQLite数据库

    Qt中操作SQLite数据库0.前言SQLite是一款开源、轻量级、跨平台的数据库,无需server,无需安装和管理配置。它的设计目标是嵌入式的,所以很适合小型应用,也是Qt应用开发种常用的一种数据库。1.驱动QtSQL模块使用驱动程序插件(plugins)与不同的数据库API进行通信。由于Qt的SQL模块API与数据库无关,因此所有特定于数据库的代码都包含在这些驱动程序中。Qt提供了几个驱动程序,也可以添加其他驱动程序。提供驱动程序源代码,可用作编写自己的驱动程序的模型。QtCreator在*.pro中引入sq

    2025年6月10日
    0
  • AI算法,又整新活!萌妹子来挑战~

    AI算法,又整新活!萌妹子来挑战~GANsNRoses动画脸控制变换算法

    2022年4月30日
    47
  • linux复制文件到当前目录并重命名_Linux复制文件到当前文件夹

    linux复制文件到当前目录并重命名_Linux复制文件到当前文件夹./表示当前目录cptest/*.wav./-r递归子目录cp-r绝对路径/文件目标路径cp-r绝对路径/*.wav目标路径copy一个目录下的所有文件以及递归文件到当前文件夹cp-raudios/*./

    2022年8月23日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号