2017-10-04 34 views
1

我一直在努力与这个问题了几个星期的:SESSIONS_PER_USER限用的NodeJS

出于某种原因,我们的脚本的NodeJS被连接到另一台机器一个Oracle数据库开始限SESSIONS_PER_USER示数,但我们没有任何其他连接打开到数据库。我尝试了另一个用户,但它返回完全相同的错误。

最奇怪的部分是该服务已运行数周,这是它第一次给我们这个错误。

我们使用OracleDB的(https://github.com/oracle/node-oracledb)模块连接到数据库。

我们要求技术支持团队,但显然,他们可以使用我们的用户来连接数据库,但是当它出自于我们的机器(Ubuntu的服务器14.04)使用帐户它给这个错误。我试图寻找我们的机器内可能的“缓存”的会话或连接,但我还没有找到很多关于在谷歌这个问题的帮助......

我会很感激,如果有人可以给我对此有些帮助问题,因为我不知道我还能做些什么。

在此先感谢。

+0

什么是你的会话限制?我不确定这个具体的提供商,但是根据我过去的经验,提供商会在连接并将它们存储在连接池中以供重复使用时打开几个会话。节点可能会做同样的事情。 – Strikegently

+0

它是2,系统管理员刚刚告诉我,它停止工作的那一天他们从“无限”变成了2,但无论如何它现在不应该给出任何session_limit错误,因为我们没有任何连接。 – avilac

+0

除非节点将一些数据存储在本地缓存中,但我还没有发现任何相关信息。我现在无能为力:S – avilac

回答

1

我继续回答这个问题我自己,因为所发生的事情是,IT团队改变了一些配置,我们开始有问题,从无限的请求......用户配置为2。它发生在我们的代码中使用准确的日子一个称为eachLimit的异步(nodejs)方法,您可以在其中指定一个极限迭代计数,它是2,但不知何故使它崩溃(即使限制为2)。

解决办法:删除迭代器和1(仅4元)1手动做,反正它仍然是严厉的,因为我们每天都在做这个任务。

感谢您的帮助!

1

2是任何配置文件的SESSIONS_PER_USER值可笑的低。将其恢复为无限制,以适用于您的应用程序配置文件。

有许多合法的原因,应用程序或用户需要多个连接:

  1. 背景会话 - 许多工具和应用程序自动创建一个或多个背景会话。这可能允许您的IDE运行并发语句,或者可能用于在打开窗口时异步检索元数据。
  2. 调试 - Oracle在调试时自动创建后台会话。
  3. 并行性 - 并行语句可以轻松产生数十或数百个会话。
  4. 狙击连接 - 如果您的数据库已设置非活动超时某些场次会被打死,但没有立即删除。他们有时会在GV$SESSION中显示为“sniped”,并且没有办法在重新启动数据库或等待之后摆脱它们。即使客户端没有任何连接,这些会话仍然会违反您的限制。
  5. 连接池 - 我不熟悉你的应用程序设置,但我承担了大部分的应用程序,这些天自动创建多个连接。
  6. 日的日常使用 - 很多人经常在同一时间使用一个工具比窗口打开多个连接到不同工具的数据库,或。

如果有人说“但我们的安全规则!”,请他们阅读DoD Security Technical Implementation Guide (STIG)。几乎可以肯定,他们的规则或某种安全审计的结果是基于该文件的。有没有什么反对有大量或无限数量的并发会话。您只需在您的网站特定规则中证明它的正确性。


2对于防止不必要的呼叫或防止大量打开的连接也是一个可笑的低值。

这是很难预测不同的程序将如何突破时,他们打的限制。你不能找到活动会话并不奇怪 - 也许程序会尝试自动产生X个线程,并在它们中的一些失败时立即杀死它们。

请求您的管理员解释究竟是他们正试图完成什么以及为什么。

我的猜测是,数据库配置不正确,并有任意稀缺资源。例如,参数PROCESSES和SESSIONS通常默认为低值。如果这些值保持在一个很小的值,比如100,那么就会出现问题,用户不得不争夺连接。

减少数据库中的会话数量可能会有帮助。但是2的限制是不现实的。我已经看到大量的数据库运行在数千次会话的旧硬件上。

+0

我完全同意你,但显然他们这样做,因为公司周围的许多用户需要访问此数据库(生产)和不希望过度使用不必要的通话。在这种情况下,它是一个每天运行一次的cron工作。最奇怪的是,当他们寻找我的同事的用户和我的开放连接时,并没有任何活动! – avilac