growthbook-golang
goleak
growthbook-golang | goleak | |
---|---|---|
1 | 6 | |
8 | 4,302 | |
- | 1.8% | |
5.2 | 5.8 | |
2 months ago | 16 days ago | |
Go | Go | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
growthbook-golang
-
The Case of a Leaky Goroutine
I wish Go recorded the timestamp of goroutine and let you access them.
An app I work on recently had a bug where goroutines would slowly build up over time. Turns out the bug is in the Growthbook SDK [1]. We can monitor the number of goroutines, but having a large number of goroutines waiting in the location that gets stuck is normal — we can only see such a problem over multiple days, in that the minimum value slowly goes up.
If Go could tell you the timestamp of the oldest goroutines as part of the pprof dump, we could have an alert, and it would work for any such leak.
[1] https://github.com/growthbook/growthbook-golang/pull/28
goleak
-
The Case of a Leaky Goroutine
Didn't Uber have some leaky goroutine detector? I vaguely remember seeing something like that, 5 years ago...
Ah yeah it's here.
https://github.com/uber-go/goleak
- How to start a Go project in 2023
-
A lib for goroutine leak detection
The reason why I created this project is because they don't want to make the goleak more flexible: https://github.com/uber-go/goleak/pull/52
-
Finding Goroutine Leaks in Tests
In the past, I had used https://github.com/uber-go/goleak . I hadn't looked into how it does it, but I think it's a different approach than what you wrote about. Do you have any idea what are the differences?
-
Question about integration tests and stopping goroutines
In the past, I have used this: https://github.com/uber-go/goleak . But it's not ideal, as AFAIK there isn't really a deterministic way to wait until a goroutine has actually stopped. That is, if you want to test that a goroutine has stopped, you'll end up with non-determinism, thus flaky tests.
-
Finding blocked goroutines
https://github.com/uber-go/goleak - checks for tests
What are some alternatives?
go - The Go programming language
gotrace - A lib for monitoring runtime goroutine stack
gow - Missing watch mode for Go commands. Watch Go files and execute a command like "go run" or "go test"
thefuck - Magnificent app which corrects your previous console command.
goda - Go Dependency Analysis toolkit
reflex - Run a command when files change
dockertest - Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work.
goreleaser - Deliver Go binaries as fast and easily as possible
chi - lightweight, idiomatic and composable router for building Go HTTP services
entr - Run arbitrary commands when files change
antifreeze - antifreeze is a package that detects goroutines that have been waiting for too long
go-binsize-treemap - 🔍 Go binary size SVG treemap