nodejs/diagnostics

Any plans/thoughts about monitoring event loop performance

zimbabao opened this issue · 12 comments

Event loop performance metrics like

  1. time for iteration
  2. size of the queue during each phases.
  3. statistics on these numbers (percentiles, SD etc)

Can be helpful just like GC numbers dumped by V8 VM.

Any thoughts for or against this?.

Thanks @jkrems, I'm interested in monitoring event loop.

  1. To keep tab on event loop stalls
  2. Attribute latency to event loop stalls

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

bnb commented

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 MakeCallbacks 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