背景:分析现网问题时,有时需要快速查看某个进程/子线程堆栈调用,便于进一步分析问题,现提供几种不同获取进程堆栈方法。
实现方法:
1.使用gdb attach 调试进程,使用gdb相关cmd调试进程
# gdb -p pid
进入gdb后,可通过
(gdb)bt 查看主进程堆栈
(gdb)info thread 查看线程
(gdb)thread threadid attach 线程
(gdb)bt
2.通过pstack/gstack直接打印堆栈信息
# pstack pid
直接打印堆栈信息,这种方法直接了当
3.通过gcore输出进程coredump文件
# gcore pid
# gdb cmd core
gdb调试进程静态coredump文件
4.strace打印堆栈信息
# strace -f -p pid
动态交互打印进程及其子线程的堆栈信息
5.查看proc文件的stack
# cat /proc/pid/stack 线程堆栈
# cat /proc/pid/proc/pid/stack 子线程堆栈
该方法堆栈信息较少
实际使用中,可以根据实际情况灵活选择不同的方法。