skynet-stat使用

skynet-stat使用

skynet的控制台中有一个命令为stat可以查看当前的某个skynet服务队列的状态以及当前请求的个数。最近通过这个命令,解决了一个线上问题。

问题描述

线上问题的情况是玩家在游戏中破产时就会卡住,如果不破产,一切正常。

问题分析

分析破产相关代码不难发现破产逻辑中有调用了另外一个进程中某个函数,而这个调用使用的是skynet.call阻塞的。如果整个流程不返回,那么就会阻塞在调用处。

问题定位

  • 使用console命令连接被调的进程
  • 使用stat命令查看当前进程所有skynet服务的状态
  • 发现有几个skynet服务中挂起了许多请求,不难发现这些请求正是破产时发送过来的请求被挂起了。

解决问题

  • 注释掉破产处的相关请求,发现破产后不再出现卡死情况。

总结

  • 上面的例子就是使用skynet stat命令查看服务的消息状态,进而帮助定位问题的一个例子。
  • 上例为什么会出现挂起这么多的请求就不再本文的讨论范围之内了。