1. 安装 rlwrap
在skynet调试控制台debug_console中无法使用上下方向键来使用命令历史记录,不方便,安装 rlwrap 即可。
yum install -y rlwrap
2. 代码中开启 debug_console服务
local skynet = require("skynet")
skynet.start(
function()
..........
skynet.newservice("debug_console", "127.0.0.1", 8001)
..........
skynet.exit()
end
)
3. 安装 rlwrap nc 连上debug_console
> rlwrap nc 127.0.0.1 8001
Welcome to skynet console
stat
:00000004 cpu:0.015625 message:70 mqlen:0 task:0
:00000006 cpu:0.0 message:7 mqlen:0 task:0
:00000007 cpu:0.015625 message:175 mqlen:0 task:0
:00000009 cpu:0.015625 message:1533 mqlen:0 task:0
:0000000a cpu:0.5 message:61101 mqlen:0 task:0
:0000000b cpu:0.0 message:225 mqlen:0 task:0
:0000000c cpu:0.03125 message:1183 mqlen:0 task:0
:0000000d cpu:0.1875 message:41 mqlen:0 task:1
4. 常用的debug_console命令
列出服务信息
- list: 简单列出skynet的服务,包含地址与服务名。
- stat: 列出skynet的服务的 cpu占用、已处理的总消息数、等待队列的大小、
- mem: 列出skynet的服务中的lua虚拟机内存占用
- cmem: 列出skynet的服务中的C语言部分内存占用
- netstat: 列出网络连接的概况
对单个服务
- info address: 让一个 lua 服务汇报自己的内部信息,参见 Profile 。
- signal address sig: 向服务发送一个信号,sig 默认为 0 。当一个服务陷入死循环时,默认信号会打断正在执行的 lua 字节码,并抛出 error 显示调用栈。这是针对 endless loop 的 log 的有效调试方法。注:这里的信号并非系统信号。
- task address: 显示一个服务中所有被挂起的请求的调用栈。
- call address "foo", arg1, ... : 调用一个服务的lua类型接口,注意接口名和string型参数必须加引号,且以逗号隔开, address目前支持服务名方式。