让我们看看首先在哪里调用的
在skynet_start.c文件中,第277行
// 函数调用
skynet_profile_enable(config->profile);
// 函数实现
void
skynet_profile_enable(int enable) {
G_NODE.profile = (bool)enable;
}
// 实质就是把全局环境中的profile置为true
// G_NODE的相关信息查看《Skynet源码之:环境准备》
为何设置profile?
为什么我们要设置profile呢?原因就是为了性能监控
// 在skynet_server.c 文件的 273行中
if (ctx->profile) {
ctx->cpu_start = skynet_thread_time();
reserve_msg = ctx->cb(ctx, ctx->cb_ud, type, msg->session, msg->source, msg->data, sz);
uint64_t cost_time = skynet_thread_time() - ctx->cpu_start;
ctx->cpu_cost += cost_time;
} else {
reserve_msg = ctx->cb(ctx, ctx->cb_ud, type, msg->session, msg->source, msg->data, sz);
}
// 对每个服务的消息处理时间进行统计
// 以及整个服务占用cpu的总时间
主要是为了监控服务的性能和状态
在发生问题时,能查看到那个服务发生了问题
可以通过控制台程序:debug_console,发出指令 time 或 cpu
来查看对应服务的花费时间
相关的性能分析
云风的 BLOG: 跟踪 skynet 服务间的消息请求及性能分析 (codingnow.com)