节点和MySQL – 解决“太多连接”的问题

我有一个使用MySQL数据库在Node.jsExpress上运行的应用程序。 我使用的驱动程序是node-orm2 。 我们的用户不断报告“ 太多连接 ”错误,我已经诊断出这个问题,但我不知道如何解决这个问题。

基本上发生的是,每当新用户访问该网站时,驱动程序为他们创build一个新的线程/进程 。 我可以做一个SHOW PROCESSLIST查询数据库,它会显示在那里的Time0

如果用户进行另一个需要数据库的操作,那么同一个线程将被重新使用 ,并且Time会回到0 。 但是,如果他们不这样做, 线程就会保持活动状态 (使用“ Sleep Command ”), Time 。 数据库的最大连接限制为250 ,超时为7200

所以基本上,如果在2个小时内有超过250人使用这个网站,我们会看到“连接太多”的错误。

我尝试使用连接池 ,但这使问题变得更糟。 每当新用户使用数据库时,它就创build了10个线程,当达到7200秒超时时, 线程重新生成

我在这里有什么select?

我目前的方法是每半小时运行一个计划任务来closures已经打开太久的线程,但有没有更好的方法?

我正在使用以下设置:

 db.settings.set("properties.association_key", "{name}Id"); db.settings.set("instance.autoFetch", true); db.settings.set("instance.returnAllErrors", true); db.settings.set("instance.cache", false); 

连接池可能值得重新审视。 连接池的一个卖点是您可以configuration它们以在一段时间后收回空闲或卡住的连接。 所以即使你的应用程序泄漏了连接,数据库也是受保护的。

我知道这并不能解决你的线程问题,但在任何情况下回收连接可能是明智的。