当前位置: 首页 > 科技观察

进程栈分析的两个命令详解:Pstack和Starce

时间:2023-03-23 12:09:26 科技观察

概述今天主要分享两个命令,多用于分析进程的具体调用,经常用于排查问题。pstackpstack用于跟踪进程堆栈。此命令在排除进程问题时非常有用。比如我们发现某个服务一直处于工作状态(比如假死状态,像死循环一样)。使用该命令可以轻松定位问题;可以使用一段时间,如果发现代码栈总是停在同一个位置,需要关注那个位置,可能是问题所在;1、安装pstackyuminstall*pstack*-y2,分析mysql进程ps-ef|grepmysql3。将进程的stacktrace信息写入文件pstack.logpstack2313>>pstack.logpstack2313>>pstack.logpstack2313>>pstack.log4。如下图,可以看到函数调用关系为:_start->__libc_start_main->connection_event_loop->listen_for_connection_event->poll.stracestrace常用来跟踪进程执行过程中的系统调用和接收信号。在Linux世界中,进程不能直接访问硬件设备。当进程需要访问硬件设备(如读取磁盘文件、接收网络数据等)时,必须从用户态切换到内核态,通过系统调用访问硬件设备。strace可以跟踪进程产生的系统调用,包括参数、返回值和执行时间。1.安装straceyuminstall-ystrace2.strace分析stracecat/dev/null这里每一行都是一个系统调用。等号左边是系统调用的函数名及其参数,右边是调用的返回值。strace显示这些调用的参数并以符号形式返回值。strace从内核接收信息,不需要以任何特殊方式构建内核。3.跟踪可执行程序strace-f-F-o~/straceout.txtmyserver-f-F选项告诉strace同时跟踪fork和vfork的进程,-o选项将所有strace输出写入~/straceout.txt,myserver是用来启动和调试程序的。4、跟踪服务程序strace-ooutput.txt-T-tt-etrace=all-p2313跟踪2313进程的所有系统调用(-etrace=all),统计系统调用耗时和启动时间(并可视化时、分、秒格式),最后将记录结果保存在output.txt文件中。