golang / gddo

Go Doc Dot Org
https://godoc.org
BSD 3-Clause "New" or "Revised" License
1.1k stars 265 forks source link

Debug hang in http client #139

Closed garyburd closed 10 years ago

garyburd commented 10 years ago

The crawler hangs. The last log entry says that the transport CancelRequest was called. The stack dump is:

SIGQUIT: quit
PC=0x43ea81

runtime.futex(0xd0c808, 0x0, 0x0, 0x0)
    /home/u/go/src/pkg/runtime/sys_linux_amd64.s:268 +0x21
runtime.futexsleep(0xd0c808, 0x0, 0xffffffffffffffff)
    /home/u/go/src/pkg/runtime/os_linux.c:49 +0x47
runtime.notesleep(0xd0c808)
    /home/u/go/src/pkg/runtime/lock_futex.c:134 +0x76
stopm()
    /home/u/go/src/pkg/runtime/proc.c:932 +0xe1
findrunnable()
    /home/u/go/src/pkg/runtime/proc.c:1237 +0x42d
schedule()
    /home/u/go/src/pkg/runtime/proc.c:1320 +0xe3
goexit0(0xc2108027e0)
    /home/u/go/src/pkg/runtime/proc.c:1417 +0x102
runtime.mcall(0x43c80d)
    /home/u/go/src/pkg/runtime/asm_amd64.s:178 +0x4b

goroutine 1 [IO wait]:
net.runtime_pollWait(0x7fbd1357d7b0, 0x72, 0x0)
    /home/u/go/src/pkg/runtime/netpoll.goc:116 +0x6a
net.(*pollDesc).Wait(0xc21010a300, 0x72, 0x7fbd13573120, 0xb)
    /home/u/go/src/pkg/net/fd_poll_runtime.go:81 +0x34
net.(*pollDesc).WaitRead(0xc21010a300, 0xb, 0x7fbd13573120)
    /home/u/go/src/pkg/net/fd_poll_runtime.go:86 +0x30
net.(*netFD).accept(0xc21010a2a0, 0x94d418, 0x0, 0x7fbd13573120, 0xb)
    /home/u/go/src/pkg/net/fd_unix.go:382 +0x2c2
net.(*TCPListener).AcceptTCP(0xc21023b858, 0x4c536b, 0x7fbd133d3928, 0x4c536b)
    /home/u/go/src/pkg/net/tcpsock_posix.go:233 +0x47
net.(*TCPListener).Accept(0xc21023b858, 0x7fbd1357c890, 0xc210c63b88, 0xc210568180, 0x0)
    /home/u/go/src/pkg/net/tcpsock_posix.go:243 +0x27
net/http.(*Server).Serve(0xc21024aaf0, 0x7fbd1357e478, 0xc21023b858, 0x0, 0x0)
    /home/u/go/src/pkg/net/http/server.go:1622 +0x91
net/http.(*Server).ListenAndServe(0xc21024aaf0, 0xc21024aaf0, 0x7fbd133d3a38)
    /home/u/go/src/pkg/net/http/server.go:1612 +0xa0
net/http.ListenAndServe(0x864a00, 0x5, 0x7fbd1357e450, 0xc210244e00, 0x2, ...)
    /home/u/go/src/pkg/net/http/server.go:1677 +0x6d
main.main()
    /home/u/mygo/go/src/github.com/garyburd/gddo/gddo-server/main.go:897 +0x249c

goroutine 65 [select]:
net/http.(*Transport).getConn(0xd05c60, 0xc210891120, 0xc210891120, 0x0, 0x0)
    /home/u/go/src/pkg/net/http/transport.go:424 +0x24d
net/http.(*Transport).RoundTrip(0xd05c60, 0xc21489b4e0, 0xc210c7c080, 0x0, 0x0)
    /home/u/go/src/pkg/net/http/transport.go:182 +0x340
main.(*transport).RoundTrip(0xd05c60, 0xc21489b4e0, 0x0, 0x0, 0x0)
    /home/u/mygo/go/src/github.com/garyburd/gddo/gddo-server/client.go:39 +0xf8
net/http.send(0xc21489b4e0, 0x7fbd13573650, 0xd05c60, 0x0, 0x0, ...)
    /home/u/go/src/pkg/net/http/client.go:168 +0x37f
net/http.(*Client).send(0xd05940, 0xc21489b4e0, 0x29, 0x438e21, 0x8)
    /home/u/go/src/pkg/net/http/client.go:100 +0xd9
net/http.(*Client).doFollowingRedirects(0xd05940, 0xc21489b4e0, 0x94e2a8, 0x0, 0x0, ...)
    /home/u/go/src/pkg/net/http/client.go:294 +0x671
net/http.(*Client).Get(0xd05940, 0xc210891090, 0x29, 0x8649c0, 0x0, ...)
    /home/u/go/src/pkg/net/http/client.go:248 +0xb2
github.com/uburd/gosrc.fetchMeta(0xd05940, 0xc210d5a020, 0x18, 0x0, 0x0, ...)
    /home/u/mygo/go/src/github.com/garyburd/gosrc/gosrc.go:161 +0x186
github.com/uburd/gosrc.getDynamic(0xd05940, 0xc210d5a020, 0x18, 0xc210f11d82, 0x28, ...)
    /home/u/mygo/go/src/github.com/garyburd/gosrc/gosrc.go:249 +0x4c
github.com/uburd/gosrc.Get(0xd05940, 0xc210d5a020, 0x18, 0xc210f11d82, 0x28, ...)
    /home/u/mygo/go/src/github.com/garyburd/gosrc/gosrc.go:317 +0x2fd
github.com/uburd/gddo/doc.Get(0xd05940, 0xc210d5a020, 0x18, 0xc210f11d82, 0x2a, ...)
    /home/u/mygo/go/src/github.com/garyburd/gddo/doc/get.go:27 +0x112
main.crawlDoc(0x8733c0, 0x5, 0xc210d5a020, 0x18, 0xc210e736c0, ...)
    /home/u/mygo/go/src/github.com/garyburd/gddo/gddo-server/crawl.go:68 +0x178f
main.doCrawl(0xeca3c417c, 0x287323b5)
    /home/u/mygo/go/src/github.com/garyburd/gddo/gddo-server/background.go:83 +0x5a1
main.runBackgroundTasks()
    /home/u/mygo/go/src/github.com/garyburd/gddo/gddo-server/background.go:48 +0x207
created by main.main
    /home/u/mygo/go/src/github.com/garyburd/gddo/gddo-server/main.go:844 +0x131f

goroutine 73 [syscall]:
runtime.goexit()
    /home/u/go/src/pkg/runtime/proc.c:1394

goroutine 337 [finalizer wait]:
runtime.park(0x423a20, 0xd03b40, 0xcffec8)
    /home/u/go/src/pkg/runtime/proc.c:1342 +0x66
runfinq()
    /home/u/go/src/pkg/runtime/mgc0.c:2276 +0x84
runtime.goexit()
    /home/u/go/src/pkg/runtime/proc.c:1394

goroutine 147455 [IO wait]:
net.runtime_pollWait(0x7fbd1357d078, 0x72, 0x0)
    /home/u/go/src/pkg/runtime/netpoll.goc:116 +0x6a
net.(*pollDesc).Wait(0xc21485dbc0, 0x72, 0x7fbd13573120, 0xb)
    /home/u/go/src/pkg/net/fd_poll_runtime.go:81 +0x34
net.(*pollDesc).WaitRead(0xc21485dbc0, 0xb, 0x7fbd13573120)
    /home/u/go/src/pkg/net/fd_poll_runtime.go:86 +0x30
net.(*netFD).Read(0xc21485db60, 0xc210e95000, 0x1000, 0x1000, 0x0, ...)
    /home/u/go/src/pkg/net/fd_unix.go:204 +0x2a0
net.(*conn).Read(0xc21097ed38, 0xc210e95000, 0x1000, 0x1000, 0x30, ...)
    /home/u/go/src/pkg/net/net.go:122 +0xc5
bufio.(*Reader).fill(0xc21004f720)
    /home/u/go/src/pkg/bufio/bufio.go:91 +0x110
bufio.(*Reader).Peek(0xc21004f720, 0x1, 0x0, 0x0, 0x0, ...)
    /home/u/go/src/pkg/bufio/bufio.go:119 +0xcb
net/http.(*persistConn).readLoop(0xc210716e80)
    /home/u/go/src/pkg/net/http/transport.go:687 +0xb7
created by net/http.(*Transport).dialConn
    /home/u/go/src/pkg/net/http/transport.go:528 +0x607

goroutine 147456 [select]:
net/http.(*persistConn).writeLoop(0xc210716e80)
    /home/u/go/src/pkg/net/http/transport.go:791 +0x271
created by net/http.(*Transport).dialConn
    /home/u/go/src/pkg/net/http/transport.go:529 +0x61e

goroutine 95236 [IO wait]:
net.runtime_pollWait(0x7fbd0f3bb738, 0x72, 0x0)
        /home/u/go/src/pkg/runtime/netpoll.goc:116 +0x6a
net.(*pollDesc).Wait(0xc210ccbb50, 0x72, 0x7fbd13573120, 0xb)
        /home/u/go/src/pkg/net/fd_poll_runtime.go:81 +0x34
net.(*pollDesc).WaitRead(0xc210ccbb50, 0xb, 0x7fbd13573120)
        /home/u/go/src/pkg/net/fd_poll_runtime.go:86 +0x30
net.(*netFD).Read(0xc210ccbaf0, 0xc210967800, 0x400, 0x400, 0x0, ...)
        /home/u/go/src/pkg/net/fd_unix.go:204 +0x2a0
net.(*conn).Read(0xc2105be740, 0xc210967800, 0x400, 0x400, 0x801fc0, ...)
        /home/u/go/src/pkg/net/net.go:122 +0xc5
crypto/tls.(*block).readFromUntil(0xc210891240, 0x7fbd1357d950, 0xc2105be740, 0x5, 0xc2105be740, ...)
        /home/u/go/src/pkg/crypto/tls/conn.go:459 +0xb6
crypto/tls.(*Conn).readRecord(0xc213378500, 0x16, 0x0, 0x43)
        /home/u/go/src/pkg/crypto/tls/conn.go:539 +0x107
crypto/tls.(*Conn).readHandshake(0xc213378500, 0xc210bf7b16, 0xc210bf7bca, 0x8a, 0x0)
        /home/u/go/src/pkg/crypto/tls/conn.go:776 +0xc3
crypto/tls.(*Conn).clientHandshake(0xc213378500, 0x0, 0x0)
        /home/u/go/src/pkg/crypto/tls/handshake_client.go:71 +0x729
crypto/tls.(*Conn).Handshake(0xc213378500, 0x0, 0x0)
        /home/u/go/src/pkg/crypto/tls/conn.go:950 +0xf1
net/http.(*Transport).dialConn(0xd05c60, 0xc210891120, 0xc210a06550, 0xc210c6c770, 0x0)
        /home/u/go/src/pkg/net/http/transport.go:515 +0x473
net/http.func·014()
        /home/u/go/src/pkg/net/http/transport.go:419 +0x3e
created by net/http.(*Transport).getConn
        /home/u/go/src/pkg/net/http/transport.go:421 +0x11a
shuting-yst commented 7 years ago

reason?