pstack跟踪进程栈

一:简介

这个命令可以显示每个进程的栈跟踪。pstack命令必须由相应进程的宿主或root运行。可以使用pstack来确定进程挂起的位置。此命令允许使用唯一选项就是进程的PID

这个命令在排查进程问题时非常有用。比如我们发现一个服务一直处于work状态(如假死状态,似死循环),使用这个命令就能轻松定位问题所在;

可以在一段时间内,多次执行pstack,若发现代码栈总是停在同一个位置,那这个位置就需要重点关注,很可能就是出问题的地方

二:使用示例

# ps aux|grep php
root      4602  0.0  0.0 112648   960 pts/0    R+   18:52   0:00 grep --color=auto php
root     11886  0.0  0.2 213900  5008 ?        Ss   Apr22   1:30 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www      11887  0.0  0.3 216004  6344 ?        S    Apr22   0:00 php-fpm: pool www
www      11888  0.0  0.3 215992  6400 ?        S    Apr22   0:00 php-fpm: pool www
www      11889  0.0  0.3 215992  6408 ?        S    Apr22   0:00 php-fpm: pool www
www      11890  0.0  0.3 215992  6400 ?        S    Apr22   0:00 php-fpm: pool www

# pstack 11887
#0  0x00007facadab0400 in __accept_nocancel () from /lib64/libc.so.6
#1  0x00000000008772f1 in fcgi_accept_request (req=req@entry=0x7ffc465923d0) at /usr/local/php/sapi/fpm/fpm/fastcgi.c:852
#2  0x000000000043372c in main (argc=<optimized out>, argv=<optimized out>) at /usr/local/php/sapi/fpm/fpm/fpm_main.c:1891
原文地址:https://www.cnblogs.com/jiujuan/p/9029550.html