-
目前使用 目前出现的问题是: 也就是说, 在这个时间点,
所在机器配置为: 32 核 64G 当前时间节点前后一秒
当前时间节点前后一秒所在机器的
目前分析可能性有三点
目前为止更倾向于由 |
Beta Was this translation helpful? Give feedback.
Replies: 6 comments 19 replies
-
C 层有个功能可以 log 单个服务的每一条消息。通过 debug console 的 logon 指令打开。 它能记录每条消息的具体内容和时间戳。 https://github.com/cloudwu/skynet/blob/master/skynet-src/skynet_log.c |
Beta Was this translation helpful? Give feedback.
-
会不会是这个队列过长导致的 function skynet.wakeup(token)
if sleep_session[token] then
tinsert(wakeup_queue, token)
return true
end
end |
Beta Was this translation helpful? Give feedback.
-
center_data高耗时调用出现的频率是怎样?是每次调用都这么高耗时 还是 偶尔一段时间出现?偶尔一段时间出现才比较可能是gc引起的。 |
Beta Was this translation helpful? Give feedback.
-
昨晚把 logon 打开的日志整理好了, 把时间转化了一下, trace 的各个状态数据对上了, 关键信息如下(详细的信息放在最后):
可以看出, function center_data.CheckGateLogin(gateId, args)
local accountId = args.accountId
local gate
for _, gi in pairs(gateInfo) do
if gi.id == gateId then
gate = gi
break
end
end
if not gate then
return {result = Opr.LoginNotGate}
end
local acInfo = gate.accountList and gate.accountList[accountId]
if not acInfo then
return {result = Opr.LoginAccTimeout}
end
if acInfo.gameToken == args.gameToken then
return {result = Opr.Ok, gateInfo = gate, acInfo = acInfo}
else
return {result = Opr.LoginTokenErr}
end
end
转化时间以后的
|
Beta Was this translation helpful? Give feedback.
-
开了大部分的 |
Beta Was this translation helpful? Give feedback.
-
最后是如何解决的呢?可以考虑做差异同步 https://blog.codingnow.com/2017/05/syncobj.html |
Beta Was this translation helpful? Give feedback.
开了大部分的
trace
,最终把问题定位在skynet.pack
上了,然后找到了根源,每次返回调用地址的时候,都返回了accountList
,缓存了所有登录过的账号信息,最大可能有几十万,所以pack
的耗时不断的增长,只是很缓慢,review 代码的时候也一直忽略了过去。