Goroutine耗尽内存

realted · · 937 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```go 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

937 次点击  
加入收藏 微博
1 回复  |  直到 2017-09-18 08:06:42
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传