request_slowlog_file

开启请求慢日志。启用后Manager进程会设置一个时钟信号,定时侦测所有TaskWorker进程,一旦进程阻塞导致请求超过规定的时间,将自动打印进程的PHP函数调用栈。

底层基于ptrace系统调用实现,某些系统可能关闭了ptrace,无法跟踪慢请求。请确认kernel.yama.ptrace_scope内核参数是否0

array(
    'request_slowlog_file' => '/tmp/trace.log',
)

trace_event_workerrequest_slowlog_timeout配置项配合使用。

注意事项

  • 需要1.10.0或更高版本
  • 仅在同步阻塞的程序中有效,请勿使用与协程和异步回调的服务器中
  • 必须是具有可写权限的文件,否则创建文件失败底层会抛出致命错误
  • 默认仅监听Task进程,通过增加trace_event_worker => true来开启对Worker进程的跟踪

超时时间

通过request_slowlog_timeout来设置请求超时时间,单位为秒。

array(
    'request_slowlog_timeout' => 2, //2秒
    'request_slowlog_file' => '/tmp/trace.log',
    'trace_event_worker' => true, //跟踪 Task 和 Worker 进程
)


  • 凌凌漆V

    ERROR trace_request(:59): failed to trace worker 8678, error lint =1. Error: Success[0]. 报这个错是啥原因呢

  • 新用户(手机注册)

    @凌凌漆 你这个问题有答复了么?

  • 麒鱼HR

    求教一下,线上的swooleHttp项目并发超过1000就会变慢,慢请求日志是这样的: [13-Feb-2019 11:25:20] [worker#0] pid 22200 [13-Feb-2019 11:25:20] [worker#0] pid 22198 [13-Feb-2019 11:25:20] [worker#0] pid 22199 怎么可以看到慢请求卡在哪里呢?比如是mysql查询、curl请求或者哪个函数

  • 麒鱼HR

    swooleHttp1.10.3的base模式下,接口调用超时未能打印慢日志。想问下这里是bug还是有别的注意事项?