Skip to content

Commit 5d4fa5b

Browse files
authored
add env var to start pprof server (#2488)
1 parent ba573c4 commit 5d4fa5b

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

cmd/server/main-server.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"fmt"
99
"log"
1010
"os"
11+
"strconv"
1112

1213
"runtime"
1314
"sync"
@@ -40,6 +41,9 @@ import (
4041
"github.com/wavetermdev/waveterm/pkg/wshutil"
4142
"github.com/wavetermdev/waveterm/pkg/wslconn"
4243
"github.com/wavetermdev/waveterm/pkg/wstore"
44+
45+
"net/http"
46+
_ "net/http/pprof"
4347
)
4448

4549
// these are set at build time
@@ -315,13 +319,42 @@ func clearTempFiles() error {
315319
return nil
316320
}
317321

322+
func maybeStartPprofServer() error {
323+
pprofPortStr := os.Getenv("WAVETERM_PPROFPORT")
324+
if pprofPortStr == "" {
325+
return nil
326+
}
327+
defer os.Unsetenv("WAVETERM_PPROFPORT")
328+
pprofPort, err := strconv.Atoi(pprofPortStr)
329+
if err != nil {
330+
return fmt.Errorf("invalid WAVETERM_PPROFPORT value '%s': %v", pprofPortStr, err)
331+
}
332+
if pprofPort < 1 || pprofPort > 65535 {
333+
return fmt.Errorf("WAVETERM_PPROFPORT must be between 1 and 65535, got %d", pprofPort)
334+
}
335+
go func() {
336+
addr := fmt.Sprintf("localhost:%d", pprofPort)
337+
log.Printf("starting pprof server on %s\n", addr)
338+
if err := http.ListenAndServe(addr, nil); err != nil {
339+
log.Printf("[error] pprof server failed: %v\n", err)
340+
}
341+
}()
342+
return nil
343+
}
344+
318345
func main() {
346+
err := maybeStartPprofServer()
347+
if err != nil {
348+
log.Printf("[error] %v\n", err)
349+
return
350+
}
351+
319352
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
320353
log.SetPrefix("[wavesrv] ")
321354
wavebase.WaveVersion = WaveVersion
322355
wavebase.BuildTime = BuildTime
323356

324-
err := grabAndRemoveEnvVars()
357+
err = grabAndRemoveEnvVars()
325358
if err != nil {
326359
log.Printf("[error] %v\n", err)
327360
return

0 commit comments

Comments
 (0)