uniqtask for gm

This commit is contained in:
wudeng
2019-08-27 19:41:30 +08:00
committed by 云风
parent 65eb351a3b
commit 478575436b
3 changed files with 36 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ local pcall = pcall
local table = table
local tremove = table.remove
local tinsert = table.insert
local traceback = debug.traceback
local profile = require "skynet.profile"
@@ -773,7 +774,7 @@ function skynet.task(ret)
local tt = type(ret)
if tt == "table" then
for session,co in pairs(session_id_coroutine) do
ret[session] = debug.traceback(co)
ret[session] = traceback(co)
end
return
elseif tt == "number" then
@@ -793,6 +794,30 @@ function skynet.task(ret)
end
end
function skynet.uniqtask()
local stacks = {}
for session, co in pairs(session_id_coroutine) do
local stack = traceback(co)
local info = stacks[stack] or {count = 0, sessions = {}}
info.count = info.count + 1
if info.count < 10 then
info.sessions[#info.sessions+1] = session
end
stacks[stack] = info
end
local ret = {}
for stack, info in pairs(stacks) do
local count = info.count
local sessions = table.concat(info.sessions, ",")
if count > 10 then
sessions = sessions .. "..."
end
local head_line = string.format("%d\tsessions:[%s]\n", count, sessions)
ret[head_line] = stack
end
return ret
end
function skynet.term(service)
return _error_dispatch(0, service)
end

View File

@@ -42,6 +42,10 @@ local function init(skynet, export)
end
end
function dbgcmd.UNIQTASK()
skynet.ret(skynet.pack(skynet.uniqtask()))
end
function dbgcmd.INFO(...)
if internal_info_func then
skynet.ret(skynet.pack(internal_info_func(...)))

View File

@@ -148,6 +148,7 @@ function COMMAND.help()
clearcache = "clear lua code cache",
service = "List unique service",
task = "task address : show service task detail",
uniqtask = "task address : show service unique task detail",
inject = "inject address luascript.lua",
logon = "logon address",
logoff = "logoff address",
@@ -262,6 +263,11 @@ function COMMAND.task(address)
return skynet.call(address,"debug","TASK")
end
function COMMAND.uniqtask(address)
address = adjust_address(address)
return skynet.call(address,"debug","UNIQTASK")
end
function COMMAND.info(address, ...)
address = adjust_address(address)
return skynet.call(address,"debug","INFO", ...)