此命令可显示每个进程的栈跟踪,且可显示每个线程的栈状态。pstack 命令必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。请参见 proc(1) 手册页。
这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方;
示例:查看bash程序进程栈:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [root@xxxxx ]# pstack 16185 Thread 35 (Thread 0x7f098b51e700 (LWP 16186)): #0 0x00007f09931657fa in sigwaitinfo () from /usr/lib64/libc.so.6 #1 0x0000000000f0f2db in timer_notify_thread_func (arg=arg@entry=0x7ffc2e5b8af0) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/mysys/posix_timers.c:77 #2 0x000000000127fae4 in pfs_spawn_thread (arg=0x2fb02b0) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/storage/perfschema/pfs.cc:2190 #3 0x00007f0994767dc5 in start_thread () from /usr/lib64/libpthread.so.0 #4 0x00007f099322528d in clone () from /usr/lib64/libc.so.6 Thread 34 (Thread 0x7f097d529700 (LWP 16187)): #0 0x00007f099455e644 in __io_getevents_0_4 () from /usr/lib64/libaio.so.1 #1 0x0000000000fca3d1 in LinuxAIOHandler::collect (this=this@entry=0x7f097d528de0) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/storage/innobase/os/os0file.cc:2506 #2 0x0000000000fcadfd in LinuxAIOHandler::poll (this=this@entry=0x7f097d528de0, m1=m1@entry=0x7f097d528e80, m2=m2@entry=0x7f097d528e88, request=request@entry=0x7f097d528e90) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/storage/innobase/os/os0file.cc:2652 #3 0x0000000000fcd436 in os_aio_linux_handler (request=0x7f097d528e90, m2=0x7f097d528e88, m1=0x7f097d528e80, global_segment=0) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/storage/innobase/os/os0file.cc:2708 #4 os_aio_handler (segment=segment@entry=0, m1=m1@entry=0x7f097d528e80, m2=m2@entry=0x7f097d528e88, request=request@entry=0x7f097d528e90) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/storage/innobase/os/os0file.cc:6254 #5 0x0000000001197d5f in fil_aio_wait (segment=segment@entry=0) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/storage/innobase/fil/fil0fil.cc:5854 #6 0x0000000001080458 in io_handler_thread (arg=<optimized out>) at /export/home2/pb2/build/sb_1-32013917-1545390379.14/rpm/BUILD/mysql-5.7.25/mysql-5.7.25/storage/innobase/srv/srv0start.cc:311 #7 0x00007f0994767dc5 in start_thread () from /usr/lib64/libpthread.so.0 #8 0x00007f099322528d in clone () from /usr/lib64/libc.so.6
|