我有一个 Go API 端点,可以进行多个 MySQL 查询。当端点收到少量请求时,它工作得很好。但是,我现在正在使用具有 100 个请求的 apache bench 对其进行测试。前100个都通过了。但是,第 2 个 100 导致出现此错误 2014/01/15 12:08:03 http: panic serving 127.0.0.1:58602: runtime error: invalid memory address or nil pointer dereferencegoroutine 973 [running]:net/http.func·009() /usr/local/Cellar/go/1.2/libexec/src/pkg/net/http/server.go:1093 +0xaeruntime.panic(0x402960, 0x9cf419) /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/panic.c:248 +0x106database/sql.(*Rows).Close(0x0, 0xc2107af540, 0x69) /usr/local/Cellar/go/1.2/libexec/src/pkg/database/sql/sql.go:1576 +0x1estore.findProductByQuery(0xc2107af540, 0x69, 0x0, 0xb88e80, 0xc21000ac70) /Users/dennis.suratna/workspace/session-go/src/store/product.go:83 +0xe3store.FindProductByAppKey(0xc210337748, 0x7, 0x496960, 0x6, 0xc2105eb1b0) /Users/dennis.suratna/workspace/session-go/src/store/product.go:28 +0x11capi.SessionHandler(0xb9eff8, 0xc2108ee200, 0xc2108f5750, 0xc2103285a0, 0x0, ...) /Users/dennis.suratna/workspace/session-go/src/api/session_handler.go:31 +0x2fbapi.func·001(0xb9eff8, 0xc2108ee200, 0xc2108f5750, 0xc2103285a0) /Users/dennis.suratna/workspace/session-go/src/api/api.go:81 +0x4freflect.Value.call(0x3ad9a0, 0xc2101ffdb0, 0x130, 0x48d520, 0x4, ...) /usr/local/Cellar/go/1.2/libexec/src/pkg/reflect/value.go:474 +0xe0breflect.Value.Call(0x3ad9a0, 0xc2101ffdb0, 0x130, 0xc2103c4a00, 0x3, ...) /usr/local/Cellar/go/1.2/libexec/src/pkg/reflect/value.go:345 +0x9dgithub.com/codegangsta/inject.(*injector).Invoke(0xc2103379c0, 0x3ad9a0, 0xc2101ffdb0, 0x4311a0, 0x1db94e, ...)看起来它不是由并发请求的数量引起的,而是由未正确关闭的东西引起的。我已经关闭了我在代码中创建的每个准备语句。我想知道是否有人以前见过这个。编辑:这就是我初始化 MySQL 连接的方式:func InitStore(environment string) error { db, err := sql.Open("mysql", connStr(environment)) .... S = &Store{ Mysql: db, Environment: environment, }}在这种情况下,当我启动服务器时只发生一次。
2 回答
忽然笑
TA贡献1806条经验 获得超5个赞
如果您使用 Go 1.2.x,您可以使用db.SetMaxOpenConns告诉 sql 包不要打开超过 X 个连接。在 X 连接已经打开(并且繁忙)之后需要数据库连接的查询将阻塞,直到有可用连接。
话虽如此:“堆栈跟踪”的下一行是什么?http/server.go 中的 ~1093 行是服务功能失败时的恢复代码。看起来更像是您只是错误处理了一些数据,这导致它失败,或者您错过了错误检查,然后在您真正返回错误时尝试处理数据,等等。
- 2 回答
- 0 关注
- 248 浏览
添加回答
举报
0/150
提交
取消