1.理解进程阻塞 阻塞类型:进程可能因等待I/O操作完成、获取锁或等待信号而阻塞。常见阻塞函数:如read、write、open、close、futex、poll、select、epoll_wait等。2.使用strace追踪 基本用法:使用strace命令追踪指定进程的系统调用。bash strace-p<PID> 输出分析:观察strace的输出,识别导致阻塞的系统调用。3.常见阻...
2个worker进程调用recvmsg收到消息后,执行epoll_ctl把epoll监听的fd(本例中,10885为11,10596也为11)中的文件描述符删掉,最后进程退出。 worker进程退出后,master进程调用wait回收子进程,完成回收后,也推出进程。 通过这样一个过程,当用户想要关闭nginx的时候,只需要对master发起关闭信号,master就会通知worker进程关闭。
参数含义如下: 展开 参数 说明 18:25:47.902439 为系统调用发生的时间。 epoll_pwait 为系统调用的函数名。 (716…) 括号内的值为函数参数。 =5 为系统调用的返回值。 <0.000038> 为系统调用的执行时间。上一篇 ethtool工具 下一篇 PCIe Max Payload Size大小配置版权...
过滤输出:使用strace的表达式语法可以过滤掉不需要的系统调用。例如,strace -e 'trace=!epoll_wait' 会排除epoll_wait系统调用。显示文件描述符路径:使用-y选项可以显示文件描述符对应的实际路径。例如,strace -y -e trace=open,read,write 。实时监控:结合grep等工具,可以...
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等 -e trace=ipc 进程见同学相关,比如shmget等 绝大多数情况,我们使用上面的组合名字就够了。实在需要跟踪具体的系统调用时,可能需要注意C 库实现的差异。 比如我们知道创建进程使用的是 fork 系统调用,但在 glibc 里面,fork 的调用实际上映射到了更...
我们可以看到,当我们的nginx没有访问量的时候,进程处于epoll_wait状态 当使用ab来对nginx做一次压力测试的时候,就会发现nginx进程疯狂的做系统调用 访问数据的时候,需要处理各种数据,进程会有大量的系统调用产生 3)使用-c选项,我们可以显示进程使用系统调用的摘要信息,及使用了多少次系统调用 ...
例如,跟踪进程727的epoll_wait系统调用:strace -e epoll_wait -p 727 五、常用的request 1、PTRACE_TRACEME 进程设置这个request目的是让自己被父进程跟踪。任何发送到该子进程的信号(除了SIGKILL)都会导致他停下来,并在父进程wait()的时候通知到父进程。另外,子进程后续调用exec会导致子进程自己收到一个SIGTRAP信...
之后,通过strace命令查看一下其在执行什么系统操作: / # ./strace -p 399 ./strace: Process 399 attached epoll_wait(-1, 0x4714f00, 0, 5000) = -1 EINVAL (Invalid argument) alarm(30) = 0 alarm(0) = 30 epoll_wait(-1, 0x4714f00, 0, 5000) = -1 EINVAL (Invalid argument) alarm(30...
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等 -e trace=ipc 进程见同学相关,比如shmget等 绝大多数情况,我们使用上面的组合名字就够了。实在需要跟踪具体的系统调用时,可能需要注意C库实现的差异。 比如我们知道创建进程用的是fork系统调用,但在glibc里面,fork的调用实际上映射到了更底层的clone...
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等 -e trace=ipc 进程见同学相关,比如shmget等 绝大多数情况,我们使用上面的组合名字就够了。实在需要跟踪具体的系统调用时,可能需要注意C库实现的差异。 比如我们知道创建进程使用的是fork系统调用,但在glibc里面,fork的调用实际上映射到了更底层的clone...