如题,最近一个go项目出现panic,(这个项目是一直运行用来监听几个接口)一看输出日志,发现报了这个错误:
Error:Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)
panic: runtime error: invalid memory address or nil pointer dereference
我一看数据库已经是这样的状态了:
mysql> show global status like 'com_stmt%';
Variable_name | Value |
---|---|
Com_stmt_close | 15961 |
Com_stmt_execute | 27579 |
Com_stmt_fetch | 0 |
Com_stmt_prepare | 35281 |
Com_stmt_reprepare | 0 |
Com_stmt_reset | 0 |
Com_stmt_send_long_data | 0 |
我一开始以为是并发数太大,但是感觉并没有那么大的并发请求,后来看了看代码(代码也不是我写的,不是很熟悉),发现代码是这样的(SQL语句就拿XXXX替换了哈):
stmt, err := db.Prepare(`XXXXXXXXXXXXXXXXXXX`)
checkErr(err)
res, err := stmt.Exec(XXXXXXXXXXXX)
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println("XXXXXXXXXX")
我发现代码中没有stmt.close()之类的操作,请问各位大佬,这个是不是出现本次问题的原因呢?如果不是的话有可能是什么原因呢?
还是要关的