问题引入:在工作中会遇到某个程序占用cpu高或者不响应请求等问题,对于这类问题的排查首先考虑程序中是不是有线程阻塞。
首先,使用ps查看程序的进程号。
[root@Joe ~]# ps -ef|grep ProgramName
root 11694 11607 1 Nov11 ? 00:12:51 ./ProgramName
第二、可以使用pstack查询程序的栈跟踪
[root@Joe ~]# pstack 11694
保存两次打印的栈跟踪信息,并比较分析
[root@Joe ~]# pstack 11694 > one
[root@Joe ~]# pstack 11694 > two
[root@Joe ~]# diff one two
第三、使用strace跟踪进程执行时的系统调用和所接收的信号
[root@Joe ~]# strace -p 11694
知识点延伸:
在排查这些问题时,还可能会使用top,netstat -anp等。