apisix-profiler icon indicating copy to clipboard operation
apisix-profiler copied to clipboard

WIP fixing profiling nginx in a container

Open dalehamel opened this issue 2 years ago • 0 comments

This is a draft, not ready for review yet.

I was attempting to use this tool to profile an nginx instance running in a container, but many of the ELF helpers don't understand how to deal with containerized paths.

The fix for this is relatively simple, we just prepend /proc/PID/root to the paths, to make them relative to the target pid's mount namespace.

Since the helpers don't take a pid, for now I've hacked it by adding a static variable and storing this early on when we are looking for the lib / binary to profile.

After these changes, I am able to profile an nginx instance running in a container, provided I have access to the root pid namespace.

I also discovered an issue with the makefile, which I will PR separately but is currently included in this branch.

  • [ ] Look into cleaner way to obtain the PID than storing in a static variable
  • [ ] Create mount namespace helpers rather than duplicating the code
  • [ ] Tests?
  • [ ] Whitespace fixes / formatting
  • [ ] Create separate PR for makefile fix

dalehamel avatar Feb 09 '23 22:02 dalehamel