【发布时间】:2014-11-26 21:49:17
【问题描述】:
我有一个使用 MySQL 数据库在 Node.js 和 Express 上运行的应用程序。我使用的驱动程序是 node-orm2。我们的用户不断报告“Too Many Connections”错误,我已经诊断出问题,但我不知道如何解决。
基本上发生的情况是,每次新用户访问该站点时,驱动程序都会为他们创建一个新线程/进程。我可以在数据库上做一个SHOW PROCESSLIST 查询,它会以Time 的0 显示在那里。
如果用户进行了另一个需要数据库的操作,那么相同的线程会被重新使用,并且Time 会返回到0。但是,如果他们不这样做,线程将保持活动状态(使用 Sleep 的 Command),并且 Time 会继续运行。该数据库的最大连接限制为250,超时为7200。
所以基本上,如果在 2 小时内超过 250 人使用该网站,我们会看到“连接太多”错误。
我尝试使用连接池,但这让问题变得更糟。每次新用户使用数据库时,都会创建 10 个线程,当达到 7200 秒超时时,线程重新生成。
我有哪些选择?
我目前的方法是每半小时运行一次计划作业来关闭已打开太久的线程,但有没有更好的方法?
我正在使用以下设置:
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);
【问题讨论】:
标签: javascript mysql node.js express node-orm2