Memory Golang代理列表脚本崩溃。等一下

Memory Golang代理列表脚本崩溃。等一下,memory,go,Memory,Go,此代码通过代理获取页面数据。 它从第1页的id开始,一直持续到100000页 package main import ( "code.google.com/p/gcfg" "database/sql" "flag" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/parnurzeal/gorequest" "log" "strconv" "time" ) func

此代码通过代理获取页面数据。 它从第1页的id开始,一直持续到100000页

package main

import (
    "code.google.com/p/gcfg"
    "database/sql"
    "flag"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/parnurzeal/gorequest"
    "log"
    "strconv"
    "time"
)

func main() {
    t := time.Now()
    initConfig()
    initRoundRobin()

    for i := vStart; i <= vStop; i++ {
        cache("https://site.ru/url/"+strconv.Itoa(i), "url", i)
    }

    fmt.Println("Time: ", time.Since(t))
}

var (
    db                  *sql.DB
    config              ConfigStruct
    configFile          = "config.gcfg"
    roundRobin          map[int]string
    roundRobinNextId    int
    roundRobinMaxId     int
    vStart              int
    vStop               int
    vPart               int
    vScriptCount        int
    roundRobinShift     int
    failedRequestCount  int
    successRequestCount int
)

type ConfigStruct struct {
    Database struct {
        ConnectionString string
        TableNameCache   string
    }
    Part struct {
        CurrentPart             int
        CurrentProxyCheckerPart int
    }
}

type ProxyAddress struct {
    Id int
    Ip string
}

func check(e error) {
    if e != nil {
        panic(e)
        log.Fatal(e)
    }
}
初始代理列表

func initRoundRobin() {
    roundRobin = make(map[int]string)
    rows, err := db.Query("SELECT id, ip FROM proxies WHERE status = 1 order by id asc")
    check(err)
    defer rows.Close()
    for rows.Next() {
        pa := new(ProxyAddress)
        if err := rows.Scan(&pa.Id, &pa.Ip); err != nil {
            check(err)
        }
        roundRobin[pa.Id] = pa.Ip
        roundRobinMaxId = pa.Id
    }
    roundRobinNextId = roundRobinShift + successRequestCount
    if roundRobinNextId > roundRobinMaxId {
        roundRobinNextId = 0
    }
    failedRequestCount = 0

}
函数检查数据库中的数据,如果数据不在其中,脚本将执行一个请求

func cache(url string, tag string, url_id int) ([]byte, error) {
    var data string
    err := db.QueryRow("SELECT data FROM cache WHERE url_id=? AND tag=?", url_id, tag).Scan(&data)
    if err == sql.ErrNoRows {
        data, err := proxyRequest(url)
        check(err)
        insert, err := db.Prepare("INSERT cache SET url_id=?, url=?, tag=?, data=?, datetime=?")
        datetime, err := strconv.ParseInt(time.Now().Format("20060102150405"), 10, 64)
        check(err)
        insert.Exec(url_id, url, tag, data, datetime)
        return []byte(data), nil
    }
    return []byte(data), nil
}
函数通过代理发出请求以获取页面数据。每个请求都通过新的代理服务器。每台服务器超时=10秒。如果服务器不发送响应-服务器将从循环中删除

func proxyRequest(url string) ([]byte, error) {
    for {
        roundRobinCurrentId := getNextRoundRobinId()
        proxy := roundRobin[roundRobinCurrentId]
        request := gorequest.New().Timeout(10000 * time.Millisecond).Proxy("http://" + proxy)
        _, body, err := request.Get(url).End()
        if err != nil {
            deleteRoundRobinId(roundRobinCurrentId, err[0].Error())
            continue
        } else {
            successRequestCount++
        }
        return []byte(body), nil
        break
    }
    return []byte(""), nil
}
从列表中获取下一个代理服务器。如果列表结束-脚本将等待30秒

func getNextRoundRobinId() int {
    for {
        if len(roundRobin) == 0 {
            initRoundRobin()
            if len(roundRobin) == 0 {
                fmt.Println("proxy is ended")
                time.Sleep(30 * time.Second)
                initRoundRobin()
            }
        }
        if roundRobinNextId == roundRobinMaxId {
            roundRobinNextId = 0
        }
        roundRobinNextId++
        _, ok := roundRobin[roundRobinNextId]
        if ok {
            break
        }
    }
    return roundRobinNextId
}
若来自代理的响应不正确,则此函数将删除服务器。 如果服务器数达到5,代理列表将重新生成

func deleteRoundRobinId(roundRobinId int, result string) {
    db.Exec("update proxies set status = 0, response =? where id=?", result, roundRobinId)
    delete(roundRobin, roundRobinId)
    failedRequestCount++
    if failedRequestCount == 5 {
        initRoundRobin()
    }
}
我在10个终端上运行这个脚本。一段时间后,它们中的大多数由于以下错误而崩溃:

database/sql.(*Stmt).Exec(0x0, 0xc20842be38, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/database/sql/sql.go:1302 +0x3e1
main.cache(0xc2082f0690, 0x23, 0x355910, 0x9, 0x12775b, 0x0, 0x0, 0x0, 0x0, 0x0)
    /var/go/src/parser/index.go:148 +0x702
main.main()
    /var/go/src/parser/index.go:31 +0x26c

goroutine 5 [chan receive, 213 minutes]:
database/sql.(*DB).connectionOpener(0xc2080446e0)
    /usr/local/go/src/database/sql/sql.go:589 +0x4c
created by database/sql.Open
    /usr/local/go/src/database/sql/sql.go:452 +0x31c

goroutine 17 [syscall, 213 minutes, locked to thread]:
runtime.goexit()
    /usr/local/go/src/runtime/asm_amd64.s:2232 +0x1

goroutine 10854 [IO wait]:
net.(*pollDesc).Wait(0xc2081f2990, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2081f2990, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2081f2930, 0xc20844e800, 0x400, 0x400, 0x0, 0x584b70, 0xc2081f7ae8)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038390, 0xc20844e800, 0x400, 0x400, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc20857dfb0, 0x5860a8, 0xc208038390, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc208484b00, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc208484b00, 0xc20834e000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc208484b00, 0xc208263398, 0xc20834e000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc2082a4460, 0xc20834e000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc2080fc060)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc2080fc060, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263340)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f

goroutine 10863 [select]:
net/http.(*persistConn).writeLoop(0xc208263ad0)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10855 [select]:
net/http.(*persistConn).writeLoop(0xc208263340)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10862 [IO wait]:
net.(*pollDesc).Wait(0xc208010b50, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc208010b50, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc208010af0, 0xc20852c800, 0x400, 0x400, 0x0, 0x584b70, 0xc2081af168)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038488, 0xc20852c800, 0x400, 0x400, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc2085597a0, 0x5860a8, 0xc208038488, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc2084858c0, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc2084858c0, 0xc208415000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc2084858c0, 0xc208263b28, 0xc208415000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc20825bce0, 0xc208415000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc2080fd740)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc2080fd740, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263ad0)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f

goroutine 10867 [select]:
net/http.(*persistConn).writeLoop(0xc208263ef0)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10866 [IO wait]:
net.(*pollDesc).Wait(0xc2084be1b0, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2084be1b0, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2084be150, 0xc208465000, 0x1000, 0x1000, 0x0, 0x584b70, 0xc2081602f0)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038540, 0xc208465000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc2080cc180, 0x5860a8, 0xc208038540, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc2082cc000, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc2082cc000, 0xc2082cf000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc2082cc000, 0xc208263f48, 0xc2082cf000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc20820ed60, 0xc2082cf000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc208326240)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc208326240, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263ef0)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f

goroutine 10859 [select]:
net/http.(*persistConn).writeLoop(0xc208263760)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10858 [IO wait]:
net.(*pollDesc).Wait(0xc2081f3790, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2081f3790, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2081f3730, 0xc208418000, 0x1000, 0x1000, 0x0, 0x584b70, 0xc2081c53e8)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038400, 0xc208418000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc208458510, 0x5860a8, 0xc208038400, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc208485340, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc208485340, 0xc2082f6000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc208485340, 0xc2082637b8, 0xc2082f6000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc20827a1a0, 0xc2082f6000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc2080fcc00)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc2080fcc00, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263760)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f
exit status 2
database/sql.(*Stmt).Exec(0x0,0xc20842be38,0x5,0x5,0x0,0x0,0x0,0x0)
/usr/local/go/src/database/sql/sql.go:1302+0x3e1
main.cache(0xc2082f0690、0x23、0x355910、0x9、0x12775b、0x0、0x0、0x0、0x0、0x0)
/var/go/src/parser/index.go:148+0x702
main.main()
/var/go/src/parser/index.go:31+0x26c
goroutine 5[成龙接球,213分钟]:
数据库/sql(*DB).ConnectionOpen(0xc2080446e0)
/usr/local/go/src/database/sql/sql.go:589+0x4c
由数据库/sql.Open创建
/usr/local/go/src/database/sql/sql.go:452+0x31c
goroutine 17[系统调用,213分钟,锁定到线程]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232+0x1
goroutine 10854[IO等待]:
net(*pollDesc).Wait(0xc2081f2990,0x72,0x0,0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84+0x47
net(*pollDesc).WaitRead(0xc2081f2990,0x0,0x0)
/usr/local/go/src/net/fd\u poll\u运行时。go:89+0x43
读取(0xc2081f2930、0xc20844e800、0x400、0x400、0x0、0x584b70、0xc2081f7ae8)
/usr/local/go/src/net/fd_unix.go:242+0x40f
读取(0xc208038390、0xc20844e800、0x400、0x400、0x0、0x0、0x0)
/usr/local/go/src/net/net.go:121+0xdc
加密/tls。(*block).readFromUntil(0xc20857dfb0、0x5860a8、0xc208038390、0x5、0x0、0x0)
/usr/local/go/src/crypto/tls/conn.go:454+0xe6
加密/tls。(*Conn).readRecord(0xC2084B00,0x17,0x0,0x0)
/usr/local/go/src/crypto/tls/conn.go:539+0x2da
加密/tls。(*Conn).Read(0xC2084B00,0xc20834e000,0x1000,0x1000,0x0,0x0,0x0)
/usr/local/go/src/crypto/tls/conn.go:904+0x166
net/http.NoteofReader.Read(0x58c488、0xC2084B00、0xc208263398、0xc20834e000、0x1000、0x1000、0x2a0300、0x0、0x0)
/usr/local/go/src/net/http/transport.go:1270+0x6e
net/http。(*NoteofReader).Read(0xc2082a4460,0xc20834e000,0x1000,0x1000,0xc208012000,0x0,0x0)
:125+0xd4
bufio.(*读卡器).填充(0xc2080fc060)
/usr/local/go/src/bufio/bufio.go:97+0x1ce
bufio.(*Reader).Peek(0xc2080fc060,0x1,0x0,0x0,0x0,0x0,0x0)
/usr/local/go/src/bufio/bufio.go:132+0xf0
net/http。(*persistConn).readLoop(0xc208263340)
/usr/local/go/src/net/http/transport.go:842+0xa4
由网络/http创建。(*传输)。拨号连接
/usr/local/go/src/net/http/transport.go:660+0xc9f
goroutine 10863[选择]:
net/http。(*persistConn).WriteLop(0xc208263ad0)
/usr/local/go/src/net/http/transport.go:945+0x41d
由网络/http创建。(*传输)。拨号连接
/usr/local/go/src/net/http/transport.go:661+0xcbc
goroutine 10855[选择]:
net/http。(*persistConn).writeLop(0xc208263340)
/usr/local/go/src/net/http/transport.go:945+0x41d
由网络/http创建。(*传输)。拨号连接
/usr/local/go/src/net/http/transport.go:661+0xcbc
goroutine 10862[IO等待]:
net。(*pollDesc)。等待(0xc208010b50,0x72,0x0,0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84+0x47
net(*pollDesc).WaitRead(0xc208010b50,0x0,0x0)
/usr/local/go/src/net/fd\u poll\u运行时。go:89+0x43
读取(0xC20801AF0、0xc20852c800、0x400、0x400、0x0、0x584b70、0xc2081af168)
/usr/local/go/src/net/fd_unix.go:242+0x40f
读取(0xc208038488,0xc20852c800,0x400,0x400,0x0,0x0,0x0,0x0)
/usr/local/go/src/net/net.go:121+0xdc
加密/tls。(*block).readFromTill(0xc2085597a0、0x5860a8、0xc208038488、0x5、0x0、0x0)
/usr/local/go/src/crypto/tls/conn.go:454+0xe6
加密/tls。(*Conn).readRecord(0xc2084858c0,0x17,0x0,0x0)
/usr/local/go/src/crypto/tls/conn.go:539+0x2da
加密/tls。(*Conn).Read(0xc2084858c0,0xc208415000,0x1000,0x1000,0x0,0x0,0x0)
/usr/local/go/src/crypto/tls/conn.go:904+0x166
net/http.NoteofReader.Read(0x58c488、0xc2084858c0、0xc208263b28、0xc208415000、0x1000、0x1000、0x2a0300、0x0、0x0)
/usr/local/go/src/net/http/transport.go:1270+0x6e
net/http。(*NoteofReader).Read(0xc20825bce0、0xc208415000、0x1000、0x1000、0xc208012000、0x0、0x0)
:125+0xd4
bufio.(*读卡器).填充(0xc2080fd740)
/usr/local/go/src/bufio/bufio.go:97+0x1ce
bufio.(*Reader).Peek(0xc2080fd740,0x1,0x0,0x0,0x0,0x0,0x0)
/usr/local/go/src/bufio/bufio.go:132+0xf0
net/http。(*persistConn).readLoop(0xc208263ad0)
/usr/local/go/src/net/http/transport.go:842+0xa4
由网络/http创建。(*传输)。拨号连接
/usr/local/go/src/net/http/transport.go:660+0xc9f
goroutine 10867[选择]:
net/http。(*persistConn).writeLoop(0xc208263ef0)
/usr/local/go/src/net/http/transport.go:945+0x41d
由网络/http创建。(*传输)。拨号连接
/usr/local/go/src/net/http/transport.go:661+0xcbc
goroutine 10866[IO等待]:
net(*pollDesc).Wait(0xc2084be1b0,0x72,0x0,0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84+0x47
net(*pollDesc).WaitRead(0xc2084be1b0,0x0,0x0)
/usr/local/go/src/net/fd\u poll\u运行时。go:89+0x43
读取(0xc2084be150、0xc208465000、0x1000、0x1000、0x0、0x584b70、0xc2081602f0)
/usr/local/go/src/net/fd_unix.go:242+0x40f
读取(0xc208038540、0xc208465000、0x1000、0x1000、0x0、0x0、0x0、0x0)
/usr/local/go/src/net/net.go:121+0xdc
加密/tls。(*block).readFromTill(0xc2080cc180、0x5860a8、0xc208038540、0x5、0x0、0x0)
/usr/local/go/src/crypto/tls/conn.go:454+0xe6
加密/tls。(*Conn).readRecord(0xc2082cc000,0x17,0x0,0x0)
/usr/local/go/src/crypto/tls/conn.go:539+0x2da
铬
database/sql.(*Stmt).Exec(0x0, 0xc20842be38, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/database/sql/sql.go:1302 +0x3e1
main.cache(0xc2082f0690, 0x23, 0x355910, 0x9, 0x12775b, 0x0, 0x0, 0x0, 0x0, 0x0)
    /var/go/src/parser/index.go:148 +0x702
main.main()
    /var/go/src/parser/index.go:31 +0x26c

goroutine 5 [chan receive, 213 minutes]:
database/sql.(*DB).connectionOpener(0xc2080446e0)
    /usr/local/go/src/database/sql/sql.go:589 +0x4c
created by database/sql.Open
    /usr/local/go/src/database/sql/sql.go:452 +0x31c

goroutine 17 [syscall, 213 minutes, locked to thread]:
runtime.goexit()
    /usr/local/go/src/runtime/asm_amd64.s:2232 +0x1

goroutine 10854 [IO wait]:
net.(*pollDesc).Wait(0xc2081f2990, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2081f2990, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2081f2930, 0xc20844e800, 0x400, 0x400, 0x0, 0x584b70, 0xc2081f7ae8)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038390, 0xc20844e800, 0x400, 0x400, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc20857dfb0, 0x5860a8, 0xc208038390, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc208484b00, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc208484b00, 0xc20834e000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc208484b00, 0xc208263398, 0xc20834e000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc2082a4460, 0xc20834e000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc2080fc060)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc2080fc060, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263340)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f

goroutine 10863 [select]:
net/http.(*persistConn).writeLoop(0xc208263ad0)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10855 [select]:
net/http.(*persistConn).writeLoop(0xc208263340)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10862 [IO wait]:
net.(*pollDesc).Wait(0xc208010b50, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc208010b50, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc208010af0, 0xc20852c800, 0x400, 0x400, 0x0, 0x584b70, 0xc2081af168)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038488, 0xc20852c800, 0x400, 0x400, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc2085597a0, 0x5860a8, 0xc208038488, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc2084858c0, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc2084858c0, 0xc208415000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc2084858c0, 0xc208263b28, 0xc208415000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc20825bce0, 0xc208415000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc2080fd740)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc2080fd740, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263ad0)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f

goroutine 10867 [select]:
net/http.(*persistConn).writeLoop(0xc208263ef0)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10866 [IO wait]:
net.(*pollDesc).Wait(0xc2084be1b0, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2084be1b0, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2084be150, 0xc208465000, 0x1000, 0x1000, 0x0, 0x584b70, 0xc2081602f0)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038540, 0xc208465000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc2080cc180, 0x5860a8, 0xc208038540, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc2082cc000, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc2082cc000, 0xc2082cf000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc2082cc000, 0xc208263f48, 0xc2082cf000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc20820ed60, 0xc2082cf000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc208326240)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc208326240, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263ef0)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f

goroutine 10859 [select]:
net/http.(*persistConn).writeLoop(0xc208263760)
    /usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:661 +0xcbc

goroutine 10858 [IO wait]:
net.(*pollDesc).Wait(0xc2081f3790, 0x72, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2081f3790, 0x0, 0x0)
    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2081f3730, 0xc208418000, 0x1000, 0x1000, 0x0, 0x584b70, 0xc2081c53e8)
    /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208038400, 0xc208418000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc208458510, 0x5860a8, 0xc208038400, 0x5, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc208485340, 0x17, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc208485340, 0xc2082f6000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x58c488, 0xc208485340, 0xc2082637b8, 0xc2082f6000, 0x1000, 0x1000, 0x2a0300, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc20827a1a0, 0xc2082f6000, 0x1000, 0x1000, 0xc208012000, 0x0, 0x0)
    <autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc2080fcc00)
    /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc2080fcc00, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc208263760)
    /usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:660 +0xc9f
exit status 2