go: net/http/pprof: add seconds= to mutex/block profile handler
Using the mutex and block profiles from net/http/pprof
currently requires modifying the application to call runtime.SetBlockProfileRate
and runtime.SetMutexProfileFraction
. Since it’s not clear what the performance impact of enabling these profiles is, few people will actually do it.
I’d like to add the following parameters, to make using these two profiles easier to use:
/debug/pprof/block?seconds=1&rate=1
/debug/pprof/mutex?seconds=1&frac=1
If the seconds
parameter isn’t specified the endpoints will behave as they currently do. If it is specified the block profile rate or mutex profile fraction will be set (default 1
) and then the handler sleeps for the specified duration. At the end of the duration the profile is written and the original profile rate / fraction is restored.
This proposal requires changing SetBlockProfileRate
to return the previous rate, similar to SetMutexProfileFraction.
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Reactions: 11
- Comments: 30 (26 by maintainers)
Commits related to this issue
- pprof: enable Mutex profiling by default This PR enables mutex profiling by default. See the following for a detailed introduction to the profile type: https://rakyll.org/mutexprofile/. The mutex pr... — committed to nvanbenschoten/cockroach by nvanbenschoten 6 years ago
- Merge #30233 30233: pprof: enable Mutex profiling by default r=nvanbenschoten a=nvanbenschoten This PR enables mutex profiling by default. See the following for a detailed introduction to the profil... — committed to cockroachdb/cockroach by deleted user 6 years ago
- pprof: enable Mutex profiling by default This PR enables mutex profiling by default. See the following for a detailed introduction to the profile type: https://rakyll.org/mutexprofile/. The mutex pr... — committed to nvanbenschoten/cockroach by nvanbenschoten 6 years ago
- net/http/pprof: allow "seconds" parameters to most profiles golang.org/cl/147598 added the support for delta computation for mutex and block profiles. In fact, this delta computation makes sense for ... — committed to golang/go by hyangah 4 years ago
@hyangah do you have any updates? I am really looking forward to this change.
@lmb It is common to have multiple levels of privileged operations in production systems. One for the full privilege to modify the production system. Another for the subset of the privileged operations such as read-only access for monitoring/debugging or temporary mutation ops for probing or profiling. Maybe you want to allow the second group of privilege to the common monitoring service, or the semi-trusted group of people who help debugging production issue, but you won’t still want to give out the full privilege of your server.
The current /debug/pprof endpoints are operating with the second privilege group, so exposing the rate change feature through the endpoints doesn’t seem like a good idea.
FYI most Go servers in Google have been running with 1% mutex profile rate (i.e. SetMutexProfileFraction(100)) for a while. Low enough to avoid regression but high enough to capture interesting events. That seems to be a good candidate for the default rate when profiling is temporary enabled by the seconds param.
@josharian yes, I like your suggestion but ‘seconds’ preexisted for cpu profile and execution trace endpoints.