mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
uniqtask for gm
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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(...)))
|
||||
|
||||
@@ -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", ...)
|
||||
|
||||
Reference in New Issue
Block a user