引言:
我们某些服务出现故障的时候,我们都是根据屏幕的输出以及打印的日志来查找出出现了什么样的错误,但是有时候我们的很多守护进程启动正常却访问不到,比如我们使用Nginx服务,登陆web的时候,却迟迟不发生页面跳转或者访问页面迟迟没反应,这个时候我们就需要对nginx这个服务做一次进程追踪,我们使用strace/gdb这样的命令对进程做一次追踪,
strace:
1,strace命令说明
strace是能够显示用户空间发出的任何系统调用,在命令的执行过程中,strace会记录和解析命令进程的所有系统调用以及这个进程所收到的所有信号值
2,strace的使用
1)strace后面直接跟我们的命令
可以看到后面跟了许多系统调用的函数,我们根据这些可以清楚的知道,我们这个命令执行时发生了那些系统调用
2)使用-p选项,这个后面跟我们的pid号,可以查看当前进程处于什么状态
我们使用-p选项后面跟着nginx的进程号
我们可以看到,当我们的nginx没有访问量的时候,进程处于epoll_wait状态
当使用ab来对nginx做一次压力测试的时候,就会发现nginx进程疯狂的做系统调用
访问数据的时候,需要处理各种数据,进程会有大量的系统调用产生
3)使用-c选项,我们可以显示进程使用系统调用的摘要信息,及使用了多少次系统调用
我们可以看到使用的read,write,open这些系统调用,以及总共产生了多少次系统调用
4)使用-o选项,我们可以将分析结构保存在某个文件中,以供后续分析使用
5) 使用-t(秒)-tt(微秒)-ttt(微秒,时间为UNIX时间戳,即从1970年1月1日起的时间)
gdb:
<1>gdb命令说明
gdb是Linux下及UNIX下的程序调试工具,我们可以启动程序,让程序按照我们的需求来自由的运行
<2>gdb使用attach,后面跟着我们的pid信息,查看我们的进程状态 如果想知道程序现在运行到了哪里,同样可以使用“backtrace”命令。当然也可以使用“step”命令对程序进行单步调试。在完成调试之后,不要忘记用detach命令断开连接,让被调试的进程可以继续正常运行。
gdb是个很复杂的工具,一般Linux下的C开发程序员会用到的比较多,这里就不做深入探讨了