mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 18:37:45 +08:00
Merge pull request #5527 from ipfs/feat/pprof-lock
pprof: create HTTP endpoint for setting MutexProfileFraction
This commit is contained in:
commit
86559e9e04
@ -448,6 +448,7 @@ func serveHTTPApi(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, error
|
||||
corehttp.VersionOption(),
|
||||
defaultMux("/debug/vars"),
|
||||
defaultMux("/debug/pprof/"),
|
||||
corehttp.MutexFractionOption("/debug/pprof-mutex/"),
|
||||
corehttp.MetricsScrapingOption("/debug/metrics/prometheus"),
|
||||
corehttp.LogOption(),
|
||||
}
|
||||
|
||||
45
core/corehttp/mutex_profile.go
Normal file
45
core/corehttp/mutex_profile.go
Normal file
@ -0,0 +1,45 @@
|
||||
package corehttp
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/http"
|
||||
"runtime"
|
||||
"strconv"
|
||||
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
)
|
||||
|
||||
// MutexFractionOption allows to set runtime.SetMutexProfileFraction via HTTP
|
||||
// using POST request with parameter 'fraction'.
|
||||
func MutexFractionOption(path string) ServeOption {
|
||||
return func(_ *core.IpfsNode, _ net.Listener, mux *http.ServeMux) (*http.ServeMux, error) {
|
||||
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost {
|
||||
w.WriteHeader(http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
if err := r.ParseForm(); err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
asfr := r.Form.Get("fraction")
|
||||
if len(asfr) == 0 {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
fr, err := strconv.Atoi(asfr)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
log.Infof("Setting MutexProfileFraction to %d", fr)
|
||||
runtime.SetMutexProfileFraction(fr)
|
||||
})
|
||||
|
||||
return mux, nil
|
||||
}
|
||||
}
|
||||
@ -106,6 +106,21 @@ test_expect_success "output only has one transfer encoding header" '
|
||||
test_cmp tecount_out tecount_exp
|
||||
'
|
||||
|
||||
curl_pprofmutex() {
|
||||
curl -f -X POST "http://127.0.0.1:$apiport/debug/pprof-mutex/?fraction=$1"
|
||||
}
|
||||
|
||||
test_expect_success "set mutex fraction for pprof (negative so it doesn't enable)" '
|
||||
curl_pprofmutex -1
|
||||
'
|
||||
|
||||
test_expect_success "test failure conditions of mutex pprof endpoint" '
|
||||
test_must_fail curl_pprofmutex &&
|
||||
test_must_fail curl_pprofmutex that_is_string &&
|
||||
test_must_fail curl -f -X GET "http://127.0.0.1:$apiport/debug/pprof-mutex/?fraction=-1"
|
||||
'
|
||||
|
||||
|
||||
test_expect_success "setup index hash" '
|
||||
mkdir index &&
|
||||
echo "<p></p>" > index/index.html &&
|
||||
|
||||
Loading…
Reference in New Issue
Block a user