2017-07-15 71 views
-1

我開發了一個java web應用程序(當某個按鈕被按下時)將數據讀入一個mongodb數據庫,並且(當另一個特定按鈕被按下時)從數據庫讀取數據。mongodb拒絕接受進一步的連接,因爲連接太多

然而,現在數據庫拒絕接受進一步的連接,因爲有太多的連接:

enter image description here

當我去到MongoDB的殼,然後鍵入命令

db.currentOp() 

我被告知數據庫實例只有一個正在進行的操作:

enter image description here

然而,當我運行命令

db.currentOp(true) 

還包括空閒連接和系統操作的操作,我得到操作的一個長長的清單。 ......下面是一個簡短摘錄:

enter image description here

什麼是所有這些連接在做什麼?他們爲什麼以及如何創建的?我可以全部刪除它們嗎? (我該怎麼做?)

+0

你在運行MongoDB的操作系統是什麼? Webapp和'mongod'運行在同一臺機器上嗎? –

+0

我們能不能確定你的上一個問題[「在web應用程序中只創建一個到數據庫的連接」](https://stackoverflow.com/questions/45118989/creating-only-one-connection-to-the-數據庫在Web應用程序)你實際上是錯誤地創建「bucketloads」更多的客戶端連接實例比你實際需要。實際上,當你這樣做時,會發生這種情況。 –

回答

0

您可能正在保存客戶端的數據。 您必須將數據發送到Web應用程序並從那裏將數據保存在MongoDB中。

或者

你可能不打開它們後關閉在Web應用程序的連接。否則,您必須關閉連接,否則可能導致內存泄漏。

要刪除連接,您只需重新啓動MongoDb服務。

+0

謝謝你的回答....起初我打開它後確實沒有關閉數據庫連接,但是我改變了它。現在,在對數據庫執行每次讀或寫操作之後,我關閉了我創建的數據庫實例。我嘗試使用control-c來終止連接...這會停止數據庫,但是當我重新啓動它時,連接數再次過高,數據庫無法接受連接。 ......我不確定你的意思是「你可能會保存客戶端的數據。」 (爲什麼會出現問題?)...實際上,這些數據來自網絡服務 –

+0

您沒有提及任何代碼。所以我認爲你錯誤地在客戶端寫了保存代碼。而且,由於您正在本地進行測試,因此未顯示任何錯誤。 –

+0

好吧,我明白...爲什麼重新啓動mongoldb服務器不殺死連接? –