Linux pstack命令

概要

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

语法

pstack pid

解释

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

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

你可能感兴趣的:(操作系统,linux,运维,服务器)