https://github.com/songgao/stacktraces
Bluntly print stacktraces of all running Go routines on specific signals.
https://github.com/songgao/stacktraces
Last synced: 25 days ago
JSON representation
Bluntly print stacktraces of all running Go routines on specific signals.
- Host: GitHub
- URL: https://github.com/songgao/stacktraces
- Owner: songgao
- License: bsd-3-clause
- Created: 2016-04-01T05:27:07.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-07-19T22:45:32.000Z (almost 8 years ago)
- Last Synced: 2025-04-18T00:11:20.063Z (about 1 month ago)
- Language: Go
- Size: 5.86 KB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# stacktraces
[](http://godoc.org/github.com/songgao/stacktraces)
`stacktraces` is a package that makes it easier to bluntly print stacktraces of
all running Go routines on specific signals. Some additional packages are also
included for automatically setting up for `SIGUSR1`, `SIGUSR2`, `SIGTERM`, and
`SIGINT`.Note that if you use this on `SIGTERM` and `SIGINT`, this would prevent the
process from terminating as in default behavior.## Example
`/tmp/example/main.go`:
```go
package mainimport (
"time"_ "github.com/songgao/stacktraces/on/SIGUSR2"
)func main() {
time.Sleep(time.Minute)
}
``````shell
$ go build && ./example
```Now, send `SIGUSR2` to the process:
```shell
$ killall -SIGUSR2 example
```The process keeps running but prints following to `stderr`:
```
$ go build && ./example
--- contention:
cycles/second=2900012405
goroutine 7 [running]:
runtime/pprof.writeGoroutineStacks(0x25f1c0, 0xc82002a018, 0x0, 0x0)
/Users/songgao/go/src/runtime/pprof/pprof.go:516 +0x84
runtime/pprof.writeGoroutine(0x25f1c0, 0xc82002a018, 0x2, 0x0, 0x0)
/Users/songgao/go/src/runtime/pprof/pprof.go:505 +0x46
runtime/pprof.(*Profile).WriteTo(0x1c1500, 0x25f1c0, 0xc82002a018, 0x2, 0x0, 0x0)
/Users/songgao/go/src/runtime/pprof/pprof.go:236 +0xd4
github.com/songgao/stacktraces.Set.func1(0xc820056060, 0x25f1c0, 0xc82002a018)
/Users/songgao/gopath/src/github.com/songgao/stacktraces/stacktraces.go:71 +0xfa
created by github.com/songgao/stacktraces.Set
/Users/songgao/gopath/src/github.com/songgao/stacktraces/stacktraces.go:74 +0xcdgoroutine 1 [sleep]:
time.Sleep(0xdf8475800)
/Users/songgao/go/src/runtime/time.go:59 +0xf9
main.main()
/tmp/example/main.go:10 +0x26goroutine 5 [syscall]:
os/signal.signal_recv(0x25b078)
/Users/songgao/go/src/runtime/sigqueue.go:116 +0x132
os/signal.loop()
/Users/songgao/go/src/os/signal/signal_unix.go:22 +0x18
created by os/signal.init.1
/Users/songgao/go/src/os/signal/signal_unix.go:28 +0x37goroutine 6 [select, locked to thread]:
runtime.gopark(0x1565c0, 0xc820028728, 0x123260, 0x6, 0x18, 0x2)
/Users/songgao/go/src/runtime/proc.go:262 +0x163
runtime.selectgoImpl(0xc820028728, 0x0, 0x18)
/Users/songgao/go/src/runtime/select.go:392 +0xa67
runtime.selectgo(0xc820028728)
/Users/songgao/go/src/runtime/select.go:215 +0x12
runtime.ensureSigM.func1()
/Users/songgao/go/src/runtime/signal1_unix.go:279 +0x32c
runtime.goexit()
/Users/songgao/go/src/runtime/asm_amd64.s:1998 +0x1
heap profile: 1: 1048576 [1: 1048576] @ heap/1048576
1: 1048576 [1: 1048576] @ 0x3f4e5 0x817a5 0x816e6 0x7d064 0x7b53a 0x5a461
# 0x817a5 runtime/pprof.writeGoroutineStacks+0x45 /Users/songgao/go/src/runtime/pprof/pprof.go:514
# 0x816e6 runtime/pprof.writeGoroutine+0x46 /Users/songgao/go/src/runtime/pprof/pprof.go:505
# 0x7d064 runtime/pprof.(*Profile).WriteTo+0xd4 /Users/songgao/go/src/runtime/pprof/pprof.go:236
# 0x7b53a github.com/songgao/stacktraces.Set.func1+0xfa /Users/songgao/gopath/src/github.com/songgao/stacktraces/stacktraces.go:71# runtime.MemStats
# Alloc = 1163176
# TotalAlloc = 1163176
# Sys = 4458744
# Lookups = 3
# Mallocs = 306
# Frees = 22
# HeapAlloc = 1163176
# HeapSys = 1671168
# HeapIdle = 147456
# HeapInuse = 1523712
# HeapReleased = 0
# HeapObjects = 284
# Stack = 425984 / 425984
# MSpan = 6960 / 16384
# MCache = 4800 / 16384
# BuckHashSys = 1442264
# NextGC = 4194304
# PauseNs = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
# NumGC = 0
# EnableGC = true
# DebugGC = false
threadcreate profile: total 8
8 @
```