Instant live visualization of your Go application runtime statistics (GC, MemStats, etc.).
- Import
"github.com/arl/statsviz"
- Register statsviz HTTP handlers
- Start your program
- Open your browser at
http://host:port/debug/statsviz
- Enjoy...
Statsviz is actually dead simple...
There are 2 HTTP handlers.
When the first one is called(/debug/statsviz
by default), it serves a browser
accessible interface showing some plots, initially empty.
The browser then connects to statsviz second HTTP handler. The second handler upgrades the connection to the websocket protocol, starts a goroutine which periodically calls runtime.ReadMemStats.
Stats are sent, via the websocket connection, to the user interface, which in turn, updates the plots.
Stats are stored in-browser inside a circular buffer which keep tracks of 60 datapoints, so one minute-worth of data by default. You can change the frequency at which stats are sent by passing SendFrequency to Register.
go get -u github.com/arl/statsviz
Either Register
statsviz HTTP handlers with the http.ServeMux you're using (preferred method):
mux := http.NewServeMux()
statsviz.Register(mux)
Or register them with the http.DefaultServeMux
:
statsviz.RegisterDefault()
If your application is not already running an HTTP server, you need to start
one. Add "net/http"
and "log"
to your imports and the following code to your
main
function:
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
By default the handled path is /debug/statsviz/
.
Then open your browser at http://localhost:6060/debug/statsviz/
Using http.DefaultServeMux
:
Using your own http.ServeMux
:
Serve statsviz
on /foo/bar
instead of default /debug/statsviz
:
Serve on https
(and wss
for websocket):
With gorilla/mux router:
Using labstack/echo router:
With gin-gonic/gin web framework:
On the plots where it matters, garbage collections are shown as vertical lines.
Pull-requests are welcome! More details in CONTRIBUTING.md
- add stop-the-world duration heatmap
- increase data retention
- light/dark mode selector
- plot image export as png
- save timeseries to disk
- load from disk previously saved timeseries
See CHANGELOG.md.