Egg: [RFC] 统计 egg 加载过程的各步骤的耗时

Created on 29 Dec 2017  ·  16Comments  ·  Source: eggjs/egg

  • Node Version: N/A
  • Egg Version: N/A
  • Plugin Name: N/A
  • Plugin Version: N/A
  • Platform: N/A
  • Mini Showcase Repository: N/A
proposals

Most helpful comment

然后可以设置一个性能基准,保证后续都控制在基准之下。 现在发现有些复杂的应用,启动加载的东西太多,可能导致超时

All 16 comments

可以考虑用 metrix 的思路来做

cc: @popomore

很早前有一个相关的:https://github.com/eggjs/egg/issues/421

  • loader 的各大步可以统一加一下耗时
  • 另外 loadFile 也可以加一下,这样有利于定位到具体的文件

然后可以设置一个性能基准,保证后续都控制在基准之下。 现在发现有些复杂的应用,启动加载的东西太多,可能导致超时

我理了下可能需要两个插件:

  • egg-metrics - 提供一个方法,执行该方法会完成打点操作,默认会定时地统计信息生成及数据清零,也可以外部禁用该 schedule,由其他插件掌控数据清零
  • [your framewark]-[your platform] - 负责对接你的运维平台,由上层框架开发者对应自己的平台开发,会禁用 egg-metrics schedule,然后自己处理统计信息,一般是公司自己的 private package。

另外是否有必要统计 koa 的一些关键操作和 middleware 的操作。

@ImHype 可以直接开干的,实践后分享出来

如果只是加载过程不需要 metrix,不过到是可以把 loader 的数据给 metrix 来显示。

@popomore metrics 主要还是统计系统运行时的状态,加载过程确实不太需要

image

2018-03-01 16:32:18,552 INFO 40119 [master] agent_worker#1:40145 started (11056ms)
2018-03-01 16:32:47,560 INFO 40119 [master] egg started on http://127.0.0.1:7001 (40068ms)

启动贼慢,难受啊。

@MiYogurt 做了啥... 你开下 loader 的 DEBUG 看看耗时在哪吧,是不是 beforeStart 太多了?

在 egg-core 增加 app.timing API,主要给核心使用,但应用和插件也可以使用。

API

const id = app.timing.start('name');
sleep(1000);
app.timing.end(id);

生成的数据

[
  { "name": "name", "start": 1525542573797, "end": 1525542574797, "duration": 1000 }
]

egg-core

  • 新增 app.timing API
  • 统计各类型 loader 时间,loadConfig/loadPlugin
  • 统计加载文件时间,loadFile
  • 统计异步完成时间,beforeStart

egg

  • dump 数据到 run 目录,每个进程单独 dump

    • run/agent_timing_pid

    • run/application_timing_pid

egg-development

提供一个可视化页面,可以展现 trace 信息,如 http://jsfiddle.net/popomore/jbcggas6/12/embedded/result/

不过有个问题是,生产环境排查无法使用,这时可以使用工具将数据上报,单独平台做可视化。

@popomore trace 日志收集吧,其实比较关心的是 koaContext 及后续 kcurl 的调用情况,不知道你们内部有做这块工作吗

这个后面会做 metrics 插件,和这个需求不一样。

@popomore 文档也加下吧?

  • FAQ:为什么我的应用启动慢
  • Plugin:为你的插件添加加载统计
Was this page helpful?
0 / 5 - 0 ratings

Related issues

popomore picture popomore  ·  47Comments

kkys4bfgp75be9p picture kkys4bfgp75be9p  ·  36Comments

zrxisme picture zrxisme  ·  44Comments

andylei18 picture andylei18  ·  35Comments

shaoshuai0102 picture shaoshuai0102  ·  52Comments