Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Node support #8

Closed
1 task
petethepig opened this issue Jan 8, 2021 · 11 comments
Closed
1 task

Add Node support #8

petethepig opened this issue Jan 8, 2021 · 11 comments

Comments

@petethepig
Copy link
Member

petethepig commented Jan 8, 2021

TODO

  • research Node profiling tools
@petethepig
Copy link
Member Author

Found this project, seems promising, but this is for heap profiling:

@petethepig
Copy link
Member Author

petethepig commented Feb 8, 2021

~0x seems promising for CPU profiling https://github.com/davidmarkclements/0x ~

But the problem is it does the whole process from start to finish, no way to do 10 second intervals.

@petethepig
Copy link
Member Author

This is promising https://github.com/google/pprof-nodejs

@vmarchaud
Copy link

vmarchaud commented Feb 15, 2021

@petethepig I've wrote some kind of wrapper around nodejs profiling in 2019, you can find them there: cpu and heap. Now that i re-read them i find them pretty ugly but it works quite well (i've been using in prod since).

I tried to document as much as i could back then inside both package's readme, however there are still few things worth to know:

  • google/pprof-nodejs is using C++ addon so it can be quite hard to setup correctly for newcomers (requires gcc when installing deps)
  • generally using inspector works well but you are essentialy using main thread cpu to receive/transmit profiling data back to your platform and specially goes between c++ and js which generally block userland code, hence introducing overhead.
  • Both of them are only able to profile JS code, some work was started to hook with pref dynamically at runtime (currently perf is only togglable with cli: docs) which would then make available profiling of C++ code too (so V8, libuv and nodejs itself)

Generally you'll find some historic in the nodejs's diag working group: nodejs/diagnostics#148 nodejs/diagnostics#444 nodejs/diagnostics#150

Feel free to reach out (mail in bio) if you have any questions

Edit: Congrats on the launch on HN btw :)

@vmarchaud
Copy link

Also not directly related to NodeJS but you might find this interesting for browser profiling: https://wicg.github.io/js-self-profiling/

@hananbeer
Copy link

I don't understand why you would need to profile v8 for nodejs. that's like profiling CPython compared to simply python as you already did. let v8 devs take care of v8, they have their tools.

now for nodejs, you can hook require, this will allow you to modify any local or global module, maybe look at istanbul instrumentor on npm. you could just hook everything and only profile if delta time is over 0.01s.
note that in node the architecture is event based but still a stack trace would be useful.

@vmarchaud
Copy link

don't understand why you would need to profile v8 for nodejs. that's like profiling CPython compared to simply python as you already did. let v8 devs take care of v8, they have their tools.

I had an issue with v8 deoptimization that pushed one of my app CPU usage to >80% (vs 40% baseline). You can also have C++ dependencies (like grpc) that won't be profiled.
Even if issues like this are rare, doesn't mean its useless to support those. Altrought its hard to support perf i agree.

now for nodejs, you can hook require, this will allow you to modify any local or global module, maybe look at istanbul instrumentor on npm. you could just hook everything and only profile if delta time is over 0.01s.

I would suggest to lookup performance for this, this is highly ineficient and block the main thread (so it slow your app), the v8 profiler is using a seperate thread.

@slonka
Copy link

slonka commented Jul 6, 2021

Some time ago I did a summary on NodeJS profilers: https://github.com/slonka/nodejs-production-ready-profiling - things might be outdated but you might find some useful info there.

@Rperry2174
Copy link
Contributor

Rperry2174 commented Dec 14, 2021

@Rperry2174
Copy link
Contributor

Added support for node!

Let us know if you have any feedback!

@ben-xD
Copy link

ben-xD commented Jun 8, 2023

Let us know if you have any feedback!

Feedback: I don't think it's usable, which is probably why it's not a very popular package.

@Rperry2174, although Node support is added, Node 18 LTS as of 2022-10 is still not supported. pyroscope-nodejs relies on pprof, which only supports Node 10, 12 or 14.

I can see that pyroscope-nodejs is moving to use @datadog/pprof in grafana/pyroscope-nodejs#19, but this merge request will be 1 year old next month.

It would be great to have support for Node 18 to make it usable.

chengjoey added a commit to chengjoey/pyroscope that referenced this issue Dec 11, 2023
* print query applications error

* order application services by updatedAt desc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants