A few readings to getting started with PSI:
- https://docs.kernel.org/accounting/psi.html
- https://facebookmicrosites.github.io/psi/docs/overview
- https://unixism.net/2019/08/linux-pressure-stall-information-psi-by-example/
go get github.com/samber/go-psi
This library is v1 and follows SemVer strictly. No breaking changes will be made to exported APIs before v2.0.0.
Requires Linux kernel >= 4.20.
GoDoc: https://pkg.go.dev/github.com/samber/go-psi
import "github.com/samber/go-psi"
// Get PSI for a single resource: psi.Memory or psi.CPU or psi.IO.
stats, err := psi.PSIStatsForResource(psi.Memory)
// Get all PSI stats.
all, err := psi.AllPSIStats()
import "github.com/samber/go-psi"
onChange, done, err := psi.Notify(psi.Memory)
for {
last, _ := <-onChange
fmt.Printf("\nMemory:\n%s\n", last)
}
// when you're done, just stop the notifier
done <- struct{}{}
import "github.com/samber/go-psi"
// Alert starts when CPU 10s average go further 90% and stops when CPU goes below 70%.
onAlert, done, err := psi.NotifyStarvation(psi.CPU, psi.Avg10, 70, 90)
for {
alert, _ := <-onAlert
fmt.Printf("\nALERT %t\nCPU: %f%%\n", alert.Starved, alert.Current)
}
// when you're done, just stop the notifier
done <- struct{}{}
- Ping me on Twitter @samuelberthe (DMs, mentions, whatever :))
- Fork the project
- Fix open issues or request new features
Don't hesitate ;)
# Install some dev dependencies
make tools
# Run tests
make test
# or
make watch-test
Give a ⭐️ if this project helped you!
Copyright © 2023 Samuel Berthe.
This project is MIT licensed.