Goroutine耗尽内存

realted · 2017-09-18 07:52:12 · 1061 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-09-18 07:52:12 的主题,其中的信息可能已经有所发展或是发生改变。

var db *sql.DB
var ch = make(chan int)

func main() {

    db, _ = sql.Open("mysql", "xxx:xxx@tcp(xxx.com:3306)/xxxdb?parseTime=true")
    db.SetMaxOpenConns(30)
    db.SetMaxIdleConns(10)
    defer db.Close()

    conn, _ := net.ListenUDP("udp4", &net.UDPAddr{
        IP:   net.IPv4(0, 0, 0, 0),
        Port: 8808,
    })
    defer conn.Close()

    for {
        go NewJob(conn, db)
        <- ch
    }
}

func NewJob(conn *net.UDPConn, db *sql.DB) {
    var buf [1024]byte
    length, remoteAddr, _ := conn.ReadFromUDP(buf[0:])
    ch <- 1
    // do something I/O on db
}

其中,每个名为NewJob的goroutine都会在读到新的udp输入时,新开一个buffer,然后读取内容到buffer中,就从ch出来。 然后每个goroutine都会对db做一些I/O处理。

运行结果是一开始还好,但内存持续上涨,到一定程度直接因为内存读取过多闪退崩溃。

请问何解


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1061 次点击  
加入收藏 微博
1 回复  |  直到 2017-09-18 08:06:42
qiangmzsx
qiangmzsx · #1 · 8年之前

https://my.oschina.net/u/553243/blog/1538634 看看我写的博客,这里就有答案了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传