Any plans/thoughts about monitoring event loop performance
zimbabao opened this issue · 12 comments
Event loop performance metrics like
- time for iteration
- size of the queue during each phases.
- statistics on these numbers (percentiles, SD etc)
Can be helpful just like GC numbers dumped by V8 VM.
Any thoughts for or against this?.
There are some of these in perf_hooks
: https://nodejs.org/api/perf_hooks.html#perf_hooks_class_performancenodetiming_extends_performanceentry
Thanks @jkrems, I'm interested in monitoring event loop.
- To keep tab on event loop stalls
- Attribute latency to event loop stalls
Have a look at my blog post: https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and-its-metrics-c4907b19da4c
I am covering some metrics that can be easily gathered there.
This might be useful:
https://github.com/naugtur/blocked-at
Disclaimer: I'm the author and blocked-at is still considered experimental (but seems to work)
I know that @jasnell looked extensively in it, and it seemed it could not be possible without a breaking change in libuv, which I don't think the team was willing to do.
Still intending to work on this, but it definitely will be libuv2
We currently do this with N|Solid and from my understanding it's... not easy. I've looked into the existing ecosystem tooling and it kinda reflects that, unfortunately. 😞
@Fishrock123 and @cxreg did a ton of work on it and may be able to share their experience with it.
time for iteration
Can already be done with a uv_check_t + uv_prepare_t.
size of the queue during each phase
Can you specify "queue" and "phase" a bit more?
Yeah we pretty much do this stuff in N|Solid already, and also event loop "stall" notifications.
size of the queue during each phase
Can you specify "queue" and "phase" a bit more?
Probably one of the things we do: essentially the number of MakeCallback
s per loop.
@bnoordhuis : By phases I'm referring to phases to https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/. By queues I meant macro task queues in that phase and micro task queue in process.tick().
@Fishrock123 : That's what I meant.
should this remain open? [ I am trying to chase dormant issues to closure ]
I've abandoned the effort to get something into libuv as I just could not get feedback or any positive momentum from the maintainers. I've added loop delay sampling to node.js itself so I think we can close this