【问题标题】:Node and MySQL - Solving a "Too Many Connections" issueNode 和 MySQL - 解决“连接过多”问题
【发布时间】:2014-11-26 21:49:17
【问题描述】:

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

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

如果用户进行了另一个需要数据库的操作,那么相同的线程会被重新使用,并且Time 会返回到0。但是,如果他们不这样做,线程将保持活动状态(使用 SleepCommand),并且 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


    【解决方案1】:

    连接池可能值得重新审视。连接池的一个卖点是您可以将它们配置为在一定时间后回收空闲或卡住的连接。因此,即使您的应用程序泄漏连接,数据库也会受到保护。

    我知道这并不能解决线程的根本问题,但无论如何回收连接可能是谨慎的做法。

    【讨论】:

      猜你喜欢
      • 2018-01-08
      • 2018-09-18
      • 2011-07-01
      • 2016-04-24
      • 2019-07-07
      • 1970-01-01
      • 2015-07-17
      • 2021-10-10
      • 2021-05-04
      相关资源
      最近更新 更多