![](/img/trans.png)
[英]Running SLS Functions Locally for Unit Tests Results in Node Mysql Connection Pool 'Too Many Connections'
[英]Node and MySQL - Solving a “Too Many Connections” issue
我有一个使用MySQL数据库在Node.js和Express上运行的应用程序。 我使用的驱动程序是node-orm2 。 我们的用户不断报告“ Too Many Connections ”错误,并且我已经诊断出问题,但是我不知道如何解决。
基本上发生的是,每次有新用户访问该站点时,驱动程序都会为他们创建一个新的线程/进程 。 我可以在db上执行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);
连接池可能值得重温。 连接池的一个卖点是,您可以将它们配置为在一定时间后回收闲置或阻塞的连接。 因此,即使您的应用程序泄漏了连接,数据库也会受到保护。
我知道这不能解决线程的根本问题,但是在任何情况下都应该收回连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.