diff options
| author | Dmitriy Vyukov <dvyukov@google.com> | 2013-08-14 00:30:55 +0400 |
|---|---|---|
| committer | Dmitriy Vyukov <dvyukov@google.com> | 2013-08-14 00:30:55 +0400 |
| commit | 4f2e382c9fb646e6f34bb0d7c4fa1a0a963a3b54 (patch) | |
| tree | a02df15c853a20184b79a0da43759e07664f1bb4 /src/pkg/runtime/panic.c | |
| parent | 2642c6e24dd3d935d01270a0fa0a89de3d3dae69 (diff) | |
| download | go-4f2e382c9fb646e6f34bb0d7c4fa1a0a963a3b54.tar.xz | |
runtime: dump scheduler state if GODEBUG=schedtrace is set
The schedtrace value sets dump period in milliseconds.
In default mode the trace looks as follows:
SCHED 0ms: gomaxprocs=4 idleprocs=0 threads=3 idlethreads=0 runqueue=0 [1 0 0 0]
SCHED 1001ms: gomaxprocs=4 idleprocs=3 threads=6 idlethreads=3 runqueue=0 [0 0 0 0]
SCHED 2008ms: gomaxprocs=4 idleprocs=1 threads=6 idlethreads=1 runqueue=0 [0 1 0 0]
If GODEBUG=scheddetail=1 is set as well, then the detailed trace is printed:
SCHED 0ms: gomaxprocs=4 idleprocs=0 threads=3 idlethreads=0 runqueue=0 singleproc=0 gcwaiting=1 mlocked=0 nmspinning=0 stopwait=0 sysmonwait=0
P0: status=3 tick=1 m=0 runqsize=1/128 gfreecnt=0
P1: status=3 tick=0 m=-1 runqsize=0/128 gfreecnt=0
P2: status=3 tick=0 m=-1 runqsize=0/128 gfreecnt=0
P3: status=3 tick=0 m=-1 runqsize=0/128 gfreecnt=0
M2: p=-1 curg=-1 mallocing=0 throwing=0 gcing=0 locks=1 dying=0 helpgc=0 spinning=0 lockedg=-1
M1: p=-1 curg=-1 mallocing=0 throwing=0 gcing=0 locks=1 dying=0 helpgc=0 spinning=0 lockedg=-1
M0: p=0 curg=1 mallocing=0 throwing=0 gcing=0 locks=1 dying=0 helpgc=0 spinning=0 lockedg=1
G1: status=2() m=0 lockedm=0
G2: status=1() m=-1 lockedm=-1
R=golang-dev, raggi, rsc
CC=golang-dev
https://golang.org/cl/11435044
Diffstat (limited to 'src/pkg/runtime/panic.c')
| -rw-r--r-- | src/pkg/runtime/panic.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/pkg/runtime/panic.c b/src/pkg/runtime/panic.c index abfa1d4d32..61afbf6e73 100644 --- a/src/pkg/runtime/panic.c +++ b/src/pkg/runtime/panic.c @@ -420,6 +420,8 @@ runtime·startpanic(void) g->writebuf = nil; runtime·xadd(&runtime·panicking, 1); runtime·lock(&paniclk); + if(runtime·debug.schedtrace > 0 || runtime·debug.scheddetail > 0) + runtime·schedtrace(true); runtime·freezetheworld(); } |
