我正在使用 Node.js 为我的 Web 应用程序运行 Web 服务器。我还使用 node-mysql 模块与 MySQL 服务器交互,以满足我所有持久数据库的需求。
每当我的 Node.js 应用程序中出现导致应用程序进程崩溃的严重错误时,我都会收到一封电子邮件。因此,我不断收到这封电子邮件,并显示“连接太多”的错误消息。这是错误的示例:
Error: Too many connections
at Function.Client._packetToUserObject (/apps/x/node_modules/mysql/lib/client.js:394:11)
at Client._handlePacket (/apps/x/node_modules/mysql/lib/client.js:307:43)
at Parser.EventEmitter.emit (events.js:96:17)
at Parser.write.emitPacket (/apps/x/node_modules/mysql/lib/parser.js:71:14)
at Parser.write (/apps/x/node_modules/mysql/lib/parser.js:576:7)
at Socket.EventEmitter.emit (events.js:96:17)
at TCP.onread (net.js:396:14)
正如您所看到的,它告诉我的只是错误来自 mysql 模块,但它没有告诉我问题发生在我的应用程序代码的哪个位置。
每当我需要运行一个或多个查询时,我的应用程序都会打开一个数据库连接。收集完所有查询和数据后,我立即关闭连接。所以,我不明白我怎么会超过 151 max_connections 限制。
除非我的代码中有一个地方我忘记调用db.end()
以关闭连接,否则我看不到我的应用程序会如何泄漏。即使有这样的错误,我也不会收到几十个发送的这些电子邮件。昨天,我收到了将近 100 封电子邮件,其中的错误大致相同。这怎么可能发生?如果我的应用程序随着时间的推移泄漏并分配了连接,那么一旦发生第一个错误,应用程序进程就会崩溃并且所有连接都会丢失,从而防止应用程序再次崩溃。由于我收到了大约 100 封电子邮件,这意味着该应用程序崩溃了大约 100 次,而且都是在很短的时间内。这只能意味着在我的应用程序的某个地方,在短时间内建立了很多连接,对吧?
我怎样才能避免这个问题?这是非常令人沮丧的。高度赞赏所有帮助。谢谢