mongodb 連線 不能即時 釋放?

時間 2021-05-31 20:02:54

1樓:iammutex

MongoDB1.3版本以上都通過MongoClient類進行連線,其策略預設就是長連線,而且無法修改。

所以連線數其實取決於fpm的客戶程序數。如果fpm量太大,必然會導致連線數過多的問題。如果你所有機器上一共有1000個fpm,那麼就會建立1000個長連線,按mongodb服務端的策略,每個連線最低消耗1M記憶體,那這1G記憶體就沒了。

所以直接方案是每次使用完後進行close操作,這樣不會讓服務端需要保持大量的連線。

而close函式也有乙個坑,就是預設只關閉寫連線(比如master或者replica sets的primary),如果要關閉全部連線,需要新增引數true即:$mongo->close(true)

每次關閉連線的方案可以有效減少伺服器的併發連線數,除非你的操作本身非常慢。但是同樣也有它的問題,比如每次不能復用之前的tcp連線,需要重新進行連線,這樣連線耗時會比較高,特別是用replica sets的時候,需要建立多個tcp連線。

所以最終可能只有兩個方案

一是減小fpm的數量

二是自建連線池,通過連線池將之個客戶端的連線收斂成固定數量對MongoDB的連線。

2樓:ElmerZhang

曾經遇到過這個問題,改為persistent connection後問題解決。

另外據其他部門同事說,已經查出是mongodb driver的bug,patch已經提交給driver作者。

3樓:薛亮亮

試試調整Linux Server 本身Idle Connection 的Timeout, 可以開啟的最大檔案數,以及擴大本地Ports 的範圍。

PHP那邊是推薦用的persistent connection, 而且也說了DB 那邊那種不推薦使用pconnect 但對於mongo 不適用, Mongo 是strongly recommend 使用persistent connection.

路由器不能連線pppoe,但是電腦上連線pppoe可以上網,怎麼解決?

ACEli 問題描述 路由器撥號,通過光貓上網失敗。網路 中國流動網路,光纖入戶FTTH接入 貓的型號 中興 F460,路由器是Netgear R7000 解決問題過程中換過TP LINK的幾個路由器僅做實驗證明路由器是沒問題的 問題緣由 F460裝的時候,我有要求不要開路由功能,並且由我自己的路由...

Redis 刪除資料後不能自動釋放記憶體麼?

Zola Zhou 這不是Redis本身的問題,Redis本身確實已經呼叫free釋放這些記憶體。這應該是使用的底層C執行時的問題。就glibc來說,在分配大於128k的記憶體時使用mmap,而使用brk sbrk在heap中分配小記憶體。通過mmap申請的內存在呼叫free後能馬上返還給系統,而h...

為什麼LOL不能空砍aa 無條件釋放平A ?

joker 這是由於兩個遊戲所使用的裝置不同。lol是pc遊戲,使用鍵鼠操作,可以進行非常精細和複雜的操作,能夠快速的選中目標進行平a或釋放技能。wzry是手遊,採用的是搖桿操縱,比相似遊戲 虛榮 採用的操作模式還要簡單,進行不了精細的操作。其次從魔獸 dota lol wzry這樣的代際關係來看,...