From 1344fc974d77d890d5b1c9721538e0911854fc0c Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Fri, 02 May 2025 17:57:56 +0800 Subject: [PATCH] Add pprof endpoint --- forge.scfg | 8 ++++++++ forged/internal/unsorted/config.go | 4 ++++ forged/internal/unsorted/server.go | 18 ++++++++++++++++++ diff --git a/forge.scfg b/forge.scfg index 399c8824529ac2219f1356054fc9d78db5ace8dc..1c8eeb94ba2aa8fbb4d7abf1404a65f759b3ecbd 100644 --- a/forge.scfg +++ b/forge.scfg @@ -98,3 +98,11 @@ # General timeouts read_timeout 300 write_timeout 300 } + +pprof { + # What network to listen on for pprof? + net tcp + + # What address to listen on? + addr localhost:28471 +} diff --git a/forged/internal/unsorted/config.go b/forged/internal/unsorted/config.go index 9eae13b4b169db423c60d1f6c3cb1553039f5503..9f07480ed574ef76016d5fb9d964b4158a9149b6 100644 --- a/forged/internal/unsorted/config.go +++ b/forged/internal/unsorted/config.go @@ -55,6 +55,10 @@ DB struct { Type string `scfg:"type"` Conn string `scfg:"conn"` } `scfg:"db"` + Pprof struct { + Net string `scfg:"net"` + Addr string `scfg:"addr"` + } `scfg:"pprof"` } // LoadConfig loads a configuration file from the specified path and unmarshals diff --git a/forged/internal/unsorted/server.go b/forged/internal/unsorted/server.go index 2eb77d34048f6a4bc5b5c1a2f44a7509aac0164e..84379b0a6a01c7679df058da2fbc6e155373ba9b 100644 --- a/forged/internal/unsorted/server.go +++ b/forged/internal/unsorted/server.go @@ -11,6 +11,7 @@ "log" "log/slog" "net" "net/http" + _ "net/http/pprof" "os" "os/exec" "path/filepath" @@ -205,6 +206,23 @@ slog.Info("listening HTTP on", "net", s.config.HTTP.Net, "addr", s.config.HTTP.Addr) go func() { if err = server.Serve(httpListener); err != nil && !errors.Is(err, http.ErrServerClosed) { slog.Error("serving HTTP", "error", err) + os.Exit(1) + } + }() + } + + // Pprof listener + { + pprofListener, err := net.Listen(s.config.Pprof.Net, s.config.Pprof.Addr) + if err != nil { + slog.Error("listening pprof", "error", err) + os.Exit(1) + } + + slog.Info("listening pprof on", "net", s.config.Pprof.Net, "addr", s.config.Pprof.Addr) + go func() { + if err := http.Serve(pprofListener, nil); err != nil { + slog.Error("serving pprof", "error", err) os.Exit(1) } }() -- 2.48.1