mirror of https://github.com/tailscale/tailscale/
tailcfg: move LogHeapPprof from Debug to c2n [capver 69]
And delete Debug.GoroutineDumpURL, which was already in c2n. Updates #8923 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>pull/8932/head
parent
24509f8b22
commit
239ad57446
@ -1,40 +0,0 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
package controlclient
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"compress/gzip"
|
|
||||||
"context"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"tailscale.com/util/goroutines"
|
|
||||||
)
|
|
||||||
|
|
||||||
func dumpGoroutinesToURL(c *http.Client, targetURL string) {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
zbuf := new(bytes.Buffer)
|
|
||||||
zw := gzip.NewWriter(zbuf)
|
|
||||||
zw.Write(goroutines.ScrubbedGoroutineDump(true))
|
|
||||||
zw.Close()
|
|
||||||
|
|
||||||
req, err := http.NewRequestWithContext(ctx, "PUT", targetURL, zbuf)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("dumpGoroutinesToURL: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
req.Header.Set("Content-Encoding", "gzip")
|
|
||||||
t0 := time.Now()
|
|
||||||
_, err = c.Do(req)
|
|
||||||
d := time.Since(t0).Round(time.Millisecond)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("dumpGoroutinesToURL error: %v to %v (after %v)", err, targetURL, d)
|
|
||||||
} else {
|
|
||||||
log.Printf("dumpGoroutinesToURL complete to %v (after %v)", targetURL, d)
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
//go:build !js && !wasm
|
||||||
|
|
||||||
|
package ipnlocal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"runtime/pprof"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
c2nLogHeap = func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
pprof.WriteHeapProfile(w)
|
||||||
|
}
|
||||||
|
}
|
@ -1,45 +0,0 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
//go:build !js
|
|
||||||
|
|
||||||
// Package logheap logs a heap pprof profile.
|
|
||||||
package logheap
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"context"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"runtime"
|
|
||||||
"runtime/pprof"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// LogHeap uploads a JSON logtail record with the base64 heap pprof by means
|
|
||||||
// of an HTTP POST request to the endpoint referred to in postURL.
|
|
||||||
func LogHeap(postURL string) {
|
|
||||||
if postURL == "" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
runtime.GC()
|
|
||||||
buf := new(bytes.Buffer)
|
|
||||||
if err := pprof.WriteHeapProfile(buf); err != nil {
|
|
||||||
log.Printf("LogHeap: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
req, err := http.NewRequestWithContext(ctx, "POST", postURL, buf)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("LogHeap: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
res, err := http.DefaultClient.Do(req)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("LogHeap: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
package logheap
|
|
||||||
|
|
||||||
func LogHeap(postURL string) {
|
|
||||||
}
|
|
Loading…
Reference in New Issue