```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处理。
运行结果是一开始还好,但内存持续上涨,到一定程度直接因为内存读取过多闪退崩溃。
请问何解