Profile(统计一个消息处理所用的系统时间)
来源:互联网 发布:hd平板软件市场 编辑:程序博客网 时间:2024/06/01 10:47
虽然 skynet 可以尽可能的利用多核计算,但要特别小心在不能并发的流程上某个环节的处理能力过低。如果在一条处理流水线上,某个服务的处理能力明显低于前一个环节,消息就很有可能堆积在这个服务的消息队列里。
所以应该尽量避免设计出单点服务。不要把太多不相关的处理放在同一个服务内(因为单一服务的消息处理是不能并行的)。对于复杂的系统,靠猜测找到这些瓶颈非常困难,需要利用一些分析工具,然后再从设计上拆分优化。
skynet.stat(what) 可以返回当前服务的性能统计信息,what 可以是以下字符串。
(1)”mqlen” 消息队列中堆积的消息数量。如果消息是均匀输入的,那么 mqlen 不断增长就说明已经过载。你可以在消息的 dispatch 函数中首先判断 mqlen ,在过载发生时做一些处理(至少 log 记录下来,方便定位问题)。
(2)”cpu” 占用的 cpu 总时间。需要在 Config 配置 profile 为 true 。
(3)”message” 处理的消息条数。
profile 模块可以帮助统计一个消息处理使用的系统时间。
使用 skynet 内置的 profile 记时而不用系统带的 os.time 是因为 profile 可以剔除阻塞调用的时间,准确统计出当前 coroutine 真正的开销。
下面是一个简单的实例:
local command = {}function command.foobar(...) endlocal function message_dispatch(cmd, ...) local f = command[cmd] f(...) end
加上 profile 就变成了这样:
local profile = require "skynet.profile"local ti = {}local function message_dispatch(cmd, ...) profile.start() local f = command[cmd] f(...) local time = profile.stop() local p = ti[cmd] if p == nil then p = { n = 0, ti = 0 } ti[cmd] = p endp.n = p.n + 1 p.ti = p.ti + time end
– 注册 info 函数,便于 debug 指令 INFO 查询。
skynet.info_func(function()
return ti end)
这段代码中,使用 profile.start() 和 profile.stop() 统计出其间的时间开销(返回单位是秒)。然后按消息类型分别记录在一张表 ti 中。
注:profile.start() 和 profile.stop() 必须在 skynet 线程中调用(记录当前线程),如果在 skynet Coroutine 中调用的话,请传入指定的 skynet 线程对象,通常可通过 skynet.coroutine.thread() 获得。
使用 skynet.info_func() 可以注册一个函数给 debug 消息处理。向这个服务发送 debug 消息 INFO 就会调用这个函数取得返回值。 使用 debug console 可以主动向服务发送 debug 消息。
- Profile(统计一个消息处理所用的系统时间)
- 如何统计启动Activity所用的时间
- 如何统计启动Activity所用的时间
- 如何统计启动Activity所用的时间
- 如何统计Activity启动所用的时间?
- Spark读取日志,统计每个service所用的平均时间
- CCS中时间统计方法(profile)
- CCS中时间统计方法(profile)
- CCS中时间统计方法(profile)
- Activity所用的时间
- js查看一个函数的执行所用时间
- 执行语句所用的时间
- 20160928 召回率统计所用的技术
- 在不发送 Windows 消息的情况下处理一个运行时间非常长的操作
- cognos transformer 建一个85w数据的cube所用的时间,接优化
- Android:如何统计系统的启动时间
- DSP学习-----CCS3.3 利用profile对程序的运行时间进行统计
- CCS3.3利用profile对程序的运行时间进行统计
- 牛客网华为在线训练---进制转换
- 疯狂队列(交错队列)
- php使用GD库制作验证码,点击验证码或看不清会刷新验证码
- ImageLoader加载图片
- VS2012 配置GDAL
- Profile(统计一个消息处理所用的系统时间)
- Maven的配置文件pom.xml
- mysql 递归查询
- 笔试编程题总结
- algorithm头文件下的常用函数
- [thinkPHP5项目实战_08]模板分离和URL生成
- swift block
- OOAD初学
- 指针函数与函数指针的区别