Skynet:Debug Console的扩展
起因
最近上线服务器遇到了一些问题,上个月CPU暴涨的问题,那个经查验是死循环导致endless loop了。
这周又遇到了mem占用达到96%的问题,在debug console里调用了gc之后,跌落至85%左右,稳定了一天。
但是在debug console里面调用list的时候,发现很多service数量有点异常,所以打算扩展一下debug console来统计各个service的数量。目前已经初步完成,特记录于此。
Debug Console
debug_console源代码的位置是skynet/service/debug_console.lua,我们一般在项目的config.lua中配置他的地址和端口即可。
这里面的代码比较简单,我们可以看到大部分的功能都实现在skynet/service/launcher.lua中。
增加statistic统计接口
我们的需求是增加一个统计接口,叫做statis,也就是statistic的简写,太长了别人容易写错。
第一步 COMMAND.help
COMMAND.help是debug console中help指令的输出内容,我们需要在其中添加新增的接口的简单描述信息。在其返回的table中添加:
statis = "Show service counts"
此时重启skynet服务器可以看到在控制台输入 help 可以看到我们新增的内容:
Welcome to skynet console
help
call call address ...
clearcache clear lua code cache
cmem Show C memory info
debug debug address : debug a lua service
exit exit address : kill a lua service
gc gc : force every lua service do garbage collect
help This help message
info info address : get service infomation
inject inject address luascript.lua
kill kill address : kill service
list List all the service
log launch a new lua service with log
logoff logoff address
logon logon address
mem mem : show memory status
ping ping address
service List unique service
shrtbl Show shared short string table info
signal signal address sig
snax lanuch a new snax service
start lanuch a new lua service
stat Dump all stats
statis Show service counts
task task address : show service task detail
<CMD OK>
第二步 在launcher.lua添加接口实现
仔细观察launcher.lua中的方法,发现了一个可用的services。里面存放了所有的service,存放的格式是{address = 启动参数}。启动参数里面包含了service的名字,所以,我们只需要对这个table进行统计就可以了。
function command.STATIS()
local list = {}
for k,v in pairs(services) do
if list[v] == nil then
list[v] = 0
end
list[v] = list[v] + 1
end
return list
end
好,完成了。
重启服务器,在控制台statics,我们就可以看到我们想要的结果了。

Skynet:Debug Console的扩展的更多相关文章
- skynet debug console 使用
预读 关于如何使用 skynet 可以参考 wiki 文档 更多实战内容见 https://www.lanqiao.cn/courses/2770 优惠码:2CZ2UA5u 环境测试搭建 使用示例代码 ...
- VS Code 调试 Golang 出现 Failed to continue: Check the debug console for details
VS Code断点调试Golang时候,弹出提示:Failed to continue: Check the debug console for details 点击Open launch.json, ...
- Unity Editor Console Pro 扩展点击定位到外部工程
链接 http://blog.csdn.net/akof1314/article/details/53232981 http://forum.china.unity3d.com/thread-2689 ...
- [文章存档]Kudu 的 Debug Console 窗口如何查看更多文件
链接:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-h ...
- VS Code调试Golang提示Failed to continue:Check the debug console for details.
解决方法: 打开调试面板 VSCode->查看->调试 添加调试目标 在"没有调试"的下拉框中点击"添加配置.."添加目标调试配置 在" ...
- debug console不见了
点击左侧这个标志.
- JS之console.log详解以及兄弟姐们邻居方法扩展
console.log() 基本用法 console.log,前端常用它来调试分析代码,你可以在任何的js代码中调用console.log(),然后你就可以在浏览器控制台看到你刚才打印的常量,变量,数 ...
- 预定义指令之debug
1)根据你必须知道的.NET一书, #define DEBUG class Program { static void Main(string[] args) { #if DEBUG Console. ...
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
发布日期:2009.12.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码 ...
- Log4j扩展使用--日志记录器Logger
OK,现在我们认真的研究下Logger的配置,进行相关配置扩展. Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局).其中,Logger负责记录 ...
随机推荐
- 2023-06-07:Redis 持久化方式有哪些?以及有什么区别?
2023-06-07:Redis 持久化方式有哪些?以及有什么区别? 答案2023-06-07: Redis提供了两种持久化机制:RDB和AOF. RDB RDB持久化是将Redis当前进程中的数据生 ...
- 用python SMTP发送简单邮件
python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 它是一组由源地址到目的地址传送邮件得规则,由它来控制信件的中转方式. Pyth ...
- Java在算法竞赛中的一些技巧
转载请注明出处(- ̄▽ ̄)- 谈到算法竞赛中使用Java,那么有一个绕不开的点就是如何快速地输入输出.通常来说,Scanner类固然可以帮助我们顺利地完成各种输入要求,而syso(System.o ...
- 【SpringBoot】条件装配 @profile
profile 使用说明: @profile注解的作用是指定类或方法在特定的 Profile 环境生效,任何@Component或@Configuration注解的类都可以使用@Profile注解. ...
- Struts2 小知识点
配置struts.xml文件,选择开发模式 在实际应用开发或者是产品部署的时候,对应着两种模式: 开发模式(devMode):此时 DevMode=ture: 产品模式(proMode):此时 Dev ...
- docker安装8版本elasticsearch遇到的问题FileSystemException
docker安装8版本elasticsearch遇到的问题 Exception in thread "main" java.nio.file.FileSystemException ...
- quarkus实战之一:准备工作
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<quarkus实战>系列 <q ...
- Angular:error TS2717: Subsequent property declarations must have the same type. Property 'contentRect' mu st be of type 'DOMRectReadOnly', but here has type 'DOMRectReadOnly'.
解决方案 在tsconfig.json的compilerOptions选项中添加如下内容"skipLibCheck": true. 如下图所示 之后重新启动项目. 如下图启动成功
- 注意!JAVA中的值传递
前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况. LeetCode 113 问题:给你二叉树的根节点root和一个整数目标和target ...
- 重返照片的原始世界:我为.NET打造的RAW照片解析利器
重返照片的原始世界:我为.NET打造的RAW照片解析利器 如果你是我的老读者,你可能还记得,在2019年,我冒险进入了一片神秘的领域--用C#解析RAW格式的照片: 20191208 - 用.NET解 ...