2017-10-04 67 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