zoukankan      html  css  js  c++  java
  • 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,我们就可以看到我们想要的结果了。

  • 相关阅读:
    需求分析与原型设计
    调研《构建之法》指导下的全国高校的历届软工实践作品
    对实践项目完成后学习到的能力的预期
    NOIP2020赛前调整
    CSP-S2020赛前心态调整
    CSP-S2019认证
    如何在数据库中存储IP地址
    jmeter手写脚本,使用正则获取cookie(禁用cookies管理器)
    LoadRunner如何监控Linux下的系统资源
    LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection reset by peer [MsgId:MERR-27780]
  • 原文地址:https://www.cnblogs.com/adoontheway/p/9081804.html
Copyright © 2011-2022 走看看