各位大牛,求帮忙!
问题描述:
1,并发10条请求,database/sql 连接池打开10个mysql连接,执行结束后,连接关闭,但内存不回收。
2,如果继续第1步,内存不会上升。
3,继续并发20条请求,则内存会再上升。
4,继续并发请求,如果并发数大于20,则内存上升,如果并发数小于20,则内存不会上升。
5,内存上升后,不会下降。
代码:
```go
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"io"
"log"
"net/http"
)
var db *sql.DB
func main() {
var err error
db, err = sql.Open("mysql", "root:123456@/test")
if err != nil {
fmt.Println(err)
}
defer db.Close()
http.HandleFunc("/hello", Hello)
err = http.ListenAndServe(":12345", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
func Hello(w http.ResponseWriter, req *http.Request) {
rows, err := db.Query("SELECT content FROM news WHERE id > 0 and id <= 10000")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var content string
if err := rows.Scan(&content); err != nil {
log.Fatal(err)
}
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
io.WriteString(w, "done")
}
```