I have a go program which hangs in a strange way sometimes and I don't know
how to build a repeatable test case.
Any help on building a repeatable test case or even identify the problem is
very welcome.
The program is called pn, for "periodic noise", and it's purpose is
described here: https://github.com/Jimdo/periodicnoise
System is Debian 6.0.4 / Linux 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28
UTC 2012 x86_64
Go version is 1.1.2
I call it like this from a crontab entry:
pn --monitor-event=blobdeploy_releasecleanup --timeout=45m --use-syslog --
/root/server_scripts/updateserver/deployment_release_cleanup.sh
Here is a gdb debug session listing all goroutines and
gdb -p 31878 /usr/bin/pn
GNU gdb (GDB) 7.3-debian
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/bin/pn...done.
Attaching to program: /usr/bin/pn, process 31878
Reading symbols from /lib/libpthread.so.0...(no debugging symbols
found)...done.
[Thread debugging using libthread_db enabled]
[New Thread 0x7f7897280700 (LWP 31898)]
[New Thread 0x7f7897a81700 (LWP 31897)]
[New Thread 0x7f7898282700 (LWP 31894)]
[New Thread 0x7f7898a83700 (LWP 31890)]
[New Thread 0x7f7899284700 (LWP 31887)]
[New Thread 0x7f7899a85700 (LWP 31885)]
[New Thread 0x7f789a388700 (LWP 31881)]
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols
found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
267 RET
Loading Go Runtime support.
(gdb) info goroutines
1 waiting runtime.park
2 syscall runtime.goexit
* 3 syscall runtime.entersyscallblock
4 waiting runtime.park
(gdb) goroutine 1 bt full
#0 0x000000000041adf4 in runtime.park (unlockf=void, lock=void,
reason=void) at /usr/lib/go/src/pkg/runtime/proc.c:1175
No locals.
#1 0x000000000042448f in netpollblock (pd=void, mode=void) at
/usr/lib/go/src/pkg/runtime/netpoll.goc:247
gpp = -1717014688
#2 0x0000000000423f52 in net.runtime_pollWait (pd=void, mode=void,
err=void) at /usr/lib/go/src/pkg/runtime/netpoll.goc:117
No locals.
#3 0x00000000004bdf81 in net.(*pollDesc).WaitWrite (pd=0xc200060110,
~anon0=...) at /usr/lib/go/src/pkg/net/fd_poll_runtime.go:80
No locals.
#4 0x00000000004c01c6 in net.(*netFD).Write (fd=0xc200060090, p= []uint8 =
{...}, nn=0, err=...) at /usr/lib/go/src/pkg/net/fd_unix.go:294
n = -1
err = {tab = 0x0, data = 0x0}
#5 0x00000000004cc913 in net.(*conn).Write (c=0xc200000168, b= []uint8 =
{...}, ~anon1=6, ~anon2=...) at /usr/lib/go/src/pkg/net/net.go:131
No locals.
#6 0x000000000043af0b in fmt.Fprintf (w=..., format="<%d>%s %s[%d]: %s%s",
a= []interface {} = {...}, n=4254901, err=...) at
/usr/lib/go/src/pkg/fmt/print.go:215
p = 0xc200082820
n64 = 31878
#7 0x000000000044b247 in
github.com/Jimdo/periodicnoise/syslog.(*netConn).writeString
(n=0xc200091200, p=29, hostname="web8", tag="blobdeploy_releasecleanup",
msg="OK\n", nl="", ~anon5=...)
at
/home/buildmaster/builds/go/periodicnoise/debian/go_build/src/github.com/Jimdo/periodicnoise/syslog/syslog.go:294
timestamp = "Oct 31 01:00:05"
#8 0x000000000044af3a in
github.com/Jimdo/periodicnoise/syslog.(*Writer).write (w=0xc20005f120,
p=29, msg="OK\n", ~anon2=3, ~anon3=...) at
/home/buildmaster/builds/go/periodicnoise/debian/go_build/src/github.com/Jimdo/periodicnoise/syslog/syslog.go:276
nl = ""
s·2 = Traceback (most recent call last):
File "/usr/lib/go/src/pkg/runtime/runtime-gdb.py", line 43, in to_string
return self.val['str'].string("utf-8", "ignore", l)
OverflowError: signed integer is greater than maximum
#9 0x000000000044ad19 in
github.com/Jimdo/periodicnoise/syslog.(*Writer).writeAndRetry
(w=0xc20005f120, p=29, s="OK\n", ~anon2=0, ~anon3=...) at
/home/buildmaster/builds/go/periodicnoise/debian/go_build/src/github.com/Jimdo/periodicnoise/syslog/syslog.go:257
pr = 29
#10 0x000000000044a6f8 in
github.com/Jimdo/periodicnoise/syslog.(*Writer).Write (w=0xc20005f120, b=
[]uint8 = {...}, ~anon1=833223656192, ~anon2=...) at
/home/buildmaster/builds/go/periodicnoise/debian/go_build/src/github.com/Jimdo/periodicnoise/syslog/syslog.go:178
No locals.
#11 0x000000000042bdf0 in log.(*Logger).Output (l=0xc20007f140,
calldepth=2, s="OK\n", ~anon2=...) at /usr/lib/go/src/pkg/log/log.go:153
file = ""
now = {sec = 63518774405, nsec = 178383383, loc = 0x671a20}
line = 0
#12 0x000000000042c657 in log.Println (v= []interface {} = {...}) at
/usr/lib/go/src/pkg/log/log.go:282
No locals.
#13 0x0000000000401f4d in main.Ok () at
/home/buildmaster/builds/go/periodicnoise/debian/go_build/src/github.com/Jimdo/periodicnoise/cmd/pn/main.go:31
No locals.
#14 0x000000000040322e in main.main () at
/home/buildmaster/builds/go/periodicnoise/debian/go_build/src/github.com/Jimdo/periodicnoise/cmd/pn/main.go:221
r·2 = {tab = 0xc20008f360, data = 0x30}
logger = {tab = 0xc20008f4e0, data = 0xc20008e790}
err = {tab = 0x0, data = 0x0}
args = []string =
{"/root/server_scripts/updateserver/deployment_release_cleanup.sh"}
&cmd = 0xc200000088
stdout = {tab = 0xc20008f7e0, data = 0xc200000268}
w·3 = {tab = 0x4006710e8, data = 0x40ecb5}
&wg = 0xc2000910e0
stderr = {tab = 0xc20008f7e0, data = 0xc200000288}
limit = 4723630
command =
"/root/server_scripts/updateserver/deployment_release_cleanup.sh"
&cw = 0x2aaae4000
timer = 0xc20007bb80
#15 0x0000000000418fe2 in runtime.main () at
/usr/lib/go/src/pkg/runtime/proc.c:182
No locals.
#16 0x000000000041afb0 in ?? () at /usr/lib/go/src/pkg/runtime/proc.c:1218
No locals.
#17 0x0000000000000000 in ?? ()
No symbol table info available.
(gdb) goroutine 2 bt full
#0 runtime.goexit () at /usr/lib/go/src/pkg/runtime/proc.c:1223
No locals.
#1 0x0000000000000000 in ?? ()
No symbol table info available.
(gdb) goroutine 3 bt full
#0 0x000000000041b52e in runtime.entersyscallblock (dummy=void) at
/usr/lib/go/src/pkg/runtime/proc.c:1334
No locals.
#1 0x0000000000415bbe in runtime.MHeap_Scavenger () at
/usr/lib/go/src/pkg/runtime/mheap.c:454
notep = -1431621792
note = 0
trace = 0
sumreleased = 0
k = 584
limit = -647710720
forcegc = -259084288
tick = -129542144
h = -1707569152
#2 0x000000000041afb0 in ?? () at /usr/lib/go/src/pkg/runtime/proc.c:1218
No locals.
#3 0x0000000000000000 in ?? ()
No symbol table info available.
(gdb) goroutine 4 bt full
#0 0x000000000041adf4 in runtime.park (unlockf=void, lock=void,
reason=void) at /usr/lib/go/src/pkg/runtime/proc.c:1175
No locals.
#1 0x0000000000425ea9 in timerproc () at
/usr/lib/go/src/pkg/runtime/time.goc:210
safe = 6723302
arg = 1
f = 3
t = 0
now = 1681968385
delta = -1
#2 0x000000000041afb0 in ?? () at /usr/lib/go/src/pkg/runtime/proc.c:1218
No locals.
#3 0x0000000000000000 in ?? ()
No symbol table info available.
(gdb) thread apply all bt full
Thread 8 (Thread 0x7f789a388700 (LWP 31881)):
#0 runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
No locals.
#1 0x0000000000416539 in runtime.futexsleep (addr=void, val=void, ns=void)
at /usr/lib/go/src/pkg/runtime/os_linux.c:58
safe = 0
ts = 4254502
#2 0x000000000040edd9 in runtime.notesleep (n=void) at
/usr/lib/go/src/pkg/runtime/lock_futex.c:125
No locals.
#3 0x000000000041c9e6 in sysmon () at
/usr/lib/go/src/pkg/runtime/proc.c:2007
ticks = 1983
lastpoll = 0
delay = 20
idle = 1
#4 0x0000000000419972 in runtime.mstart () at
/usr/lib/go/src/pkg/runtime/proc.c:485
seh = 4298912
#5 0x00000000004f03a4 in crosscall_amd64 ()
No symbol table info available.
#6 0x0000000000000003 in ?? ()
No symbol table info available.
#7 0x00007f78aab30040 in ?? () from /lib64/ld-linux-x86-64.so.2
No symbol table info available.
#8 0x0000000000000000 in ?? ()
No symbol table info available.
Thread 7 (Thread 0x7f7899a85700 (LWP 31885)):
#0 runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
No locals.
#1 0x0000000000416539 in runtime.futexsleep (addr=void, val=void, ns=void)
at /usr/lib/go/src/pkg/runtime/os_linux.c:58
safe = 0
ts = 4254502
#2 0x000000000040edd9 in runtime.notesleep (n=void) at
/usr/lib/go/src/pkg/runtime/lock_futex.c:125
No locals.
#3 0x0000000000419f8f in stopm () at /usr/lib/go/src/pkg/runtime/proc.c:795
No locals.
#4 0x000000000041ab1d in findrunnable () at
/usr/lib/go/src/pkg/runtime/proc.c:1100
safe = 512952
i = 2
p = 856576
gp = 856576
#5 0x000000000041acbd in schedule () at
/usr/lib/go/src/pkg/runtime/proc.c:1145
gp = 0
#6 0x000000000041b0df in goexit0 (gp=void) at
/usr/lib/go/src/pkg/runtime/proc.c:1247
No locals.
#7 0x00000000004263a9 in runtime.mcall (fn=void) at
/usr/lib/go/src/pkg/runtime/asm_amd64.s:195
No locals.
#8 0x000000c200064000 in ?? ()
No symbol table info available.
#9 0x0000000000000000 in ?? ()
No symbol table info available.
Thread 6 (Thread 0x7f7899284700 (LWP 31887)):
#0 runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
No locals.
#1 0x0000000000416539 in runtime.futexsleep (addr=void, val=void, ns=void)
at /usr/lib/go/src/pkg/runtime/os_linux.c:58
safe = 0
ts = 60
#2 0x000000000040ee9f in runtime.notetsleep (n=void, ns=void) at
/usr/lib/go/src/pkg/runtime/lock_futex.c:147
deadline = -1467643998
#3 0x0000000000415bbe in runtime.MHeap_Scavenger () at
/usr/lib/go/src/pkg/runtime/mheap.c:454
notep = -1431621792
note = 0
trace = 0
sumreleased = 0
k = 941
limit = -647710720
forcegc = -259084288
tick = -129542144
h = -1707569152
#4 0x000000000041afb0 in ?? () at /usr/lib/go/src/pkg/runtime/proc.c:1218
No locals.
#5 0x0000000000000000 in ?? ()
No symbol table info available.
seh = 0
#5 0x00000000004f03a4 in crosscall_amd64 ()
No symbol table info available.
#6 0x0000000000000003 in ?? ()
No symbol table info available.
#7 0x00007f78aab30040 in ?? () from /lib64/ld-linux-x86-64.so.2
No symbol table info available.
#8 0x0000000000000000 in ?? ()
No symbol table info available.
Thread 4 (Thread 0x7f7898282700 (LWP 31894)):
#0 runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
No locals.
#1 0x0000000000416539 in runtime.futexsleep (addr=void, val=void, ns=void)
at /usr/lib/go/src/pkg/runtime/os_linux.c:58
safe = 0
ts = 4254502
#2 0x000000000040edd9 in runtime.notesleep (n=void) at
/usr/lib/go/src/pkg/runtime/lock_futex.c:125
No locals.
#3 0x0000000000419f8f in stopm () at /usr/lib/go/src/pkg/runtime/proc.c:795
No locals.
#4 0x000000000041ab1d in findrunnable () at
/usr/lib/go/src/pkg/runtime/proc.c:1100
safe = 856320
i = 2
p = 409600
gp = 0
#5 0x000000000041acbd in schedule () at
/usr/lib/go/src/pkg/runtime/proc.c:1145
gp = 0
#6 0x000000000041b0df in goexit0 (gp=void) at
/usr/lib/go/src/pkg/runtime/proc.c:1247
No locals.
#7 0x00000000004263a9 in runtime.mcall (fn=void) at
/usr/lib/go/src/pkg/runtime/asm_amd64.s:195
No locals.
#8 0x000000c200064000 in ?? ()
No symbol table info available.
#9 0x0000000000000000 in ?? ()
No symbol table info available.
Thread 3 (Thread 0x7f7897a81700 (LWP 31897)):
#0 runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
No locals.
#1 0x0000000000416539 in runtime.futexsleep (addr=void, val=void, ns=void)
at /usr/lib/go/src/pkg/runtime/os_linux.c:58
safe = 0
ts = 4254502
#2 0x000000000040edd9 in runtime.notesleep (n=void) at
/usr/lib/go/src/pkg/runtime/lock_futex.c:125
No locals.
#3 0x0000000000419f8f in stopm () at /usr/lib/go/src/pkg/runtime/proc.c:795
No locals.
#4 0x000000000041ab1d in findrunnable () at
/usr/lib/go/src/pkg/runtime/proc.c:1100
safe = 512952
i = 2
p = 856576
gp = 856576
#5 0x000000000041acbd in schedule () at
/usr/lib/go/src/pkg/runtime/proc.c:1145
gp = 0
#6 0x000000000041b0df in goexit0 (gp=void) at
/usr/lib/go/src/pkg/runtime/proc.c:1247
No locals.
#7 0x00000000004263a9 in runtime.mcall (fn=void) at
/usr/lib/go/src/pkg/runtime/asm_amd64.s:195
No locals.
#8 0x000000c200064000 in ?? ()
No symbol table info available.
#9 0x0000000000000000 in ?? ()
No symbol table info available.
Thread 2 (Thread 0x7f7897280700 (LWP 31898)):
#0 runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
No locals.
#1 0x0000000000416539 in runtime.futexsleep (addr=void, val=void, ns=void)
at /usr/lib/go/src/pkg/runtime/os_linux.c:58
safe = 0
ts = 4254502
#2 0x000000000040edd9 in runtime.notesleep (n=void) at
/usr/lib/go/src/pkg/runtime/lock_futex.c:125
No locals.
#3 0x0000000000419f8f in stopm () at /usr/lib/go/src/pkg/runtime/proc.c:795
No locals.
#4 0x000000000041ab1d in findrunnable () at
/usr/lib/go/src/pkg/runtime/proc.c:1100
safe = 983040
i = 2
p = 32768
gp = 4286936
#5 0x000000000041acbd in schedule () at
/usr/lib/go/src/pkg/runtime/proc.c:1145
gp = 0
#6 0x00000000004199a3 in runtime.mstart () at
/usr/lib/go/src/pkg/runtime/proc.c:494
seh = 0
#7 0x00000000004f03a4 in crosscall_amd64 ()
No symbol table info available.
#8 0x0000000000000003 in ?? ()
No symbol table info available.
#9 0x00007f78aab30040 in ?? () from /lib64/ld-linux-x86-64.so.2
No symbol table info available.
#10 0x0000000000000000 in ?? ()
No symbol table info available.
Thread 1 (Thread 0x7f78aab25700 (LWP 31878)):
#0 runtime.futex () at /usr/lib/go/src/pkg/runtime/sys_linux_amd64.s:267
No locals.
#1 0x0000000000416539 in runtime.futexsleep (addr=void, val=void, ns=void)
at /usr/lib/go/src/pkg/runtime/os_linux.c:58
safe = 0
ts = 4254502
#2 0x000000000040edd9 in runtime.notesleep (n=void) at
/usr/lib/go/src/pkg/runtime/lock_futex.c:125
No locals.
#3 0x0000000000419f8f in stopm () at /usr/lib/go/src/pkg/runtime/proc.c:795
No locals.
#4 0x000000000041ab1d in findrunnable () at
/usr/lib/go/src/pkg/runtime/proc.c:1100
safe = 4351120
i = 2
p = 352512
gp = 4351839
#5 0x000000000041acbd in schedule () at
/usr/lib/go/src/pkg/runtime/proc.c:1145
gp = 0
#6 0x000000000041aed0 in park0 (gp=void) at
/usr/lib/go/src/pkg/runtime/proc.c:1194
No locals.
#7 0x00000000004263a9 in runtime.mcall (fn=void) at
/usr/lib/go/src/pkg/runtime/asm_amd64.s:195
No locals.
#8 0x0000000000671c60 in runtime.g0 ()
No symbol table info available.
#9 0x0000000000426276 in _rt0_amd64 () at
/usr/lib/go/src/pkg/runtime/asm_amd64.s:86
No locals.
#10 0x0000000000000006 in ?? ()
No symbol table info available.
#11 0x00007fff75f0a7d8 in ?? ()
No symbol table info available.
#12 0x0000000000000006 in ?? ()
No symbol table info available.
#13 0x00007fff75f0a7d8 in ?? ()
No symbol table info available.
#14 0x0000000000000000 in ?? ()
No symbol table info available.
(gdb) quit
A debugging session is active.
Inferior 1 [process 31878] will be detached.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/pn, process 31878
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.