[英]Mongorestore - too many open files - mac os x
我試圖將一個大數據庫的轉儲導入到我的本地 mongodb 實例。
不幸的是,我發現一個問題,對於導入的集合之一,mongo 拋出異常,即打開了太多文件。
我使用谷歌瀏覽了互聯網的強大知識,我找到了一些使用 ulimit 和 launchctl 的解決方案,但它們沒有用。
最后我通過以下方式解決了這個問題:
limit maxproc 512 1024 limit maxfiles 16384 32768
sudo sysctl -w kern.maxfilesperproc=16384 sudo sysctl -w kern.maxfiles=32768
問題不再發生,但我有疑問。 如果有一些解決方案來限制從 mongorestore 級別打開的文件數? 我不認為增加最大打開文件的全局值是一個好方法。
我使用這個別名來啟動具有不同環境設置的 mongod,它解決了迄今為止的所有問題:
ulimit -n 1024 && mongod
僅更改當前 shell 會話的限制要安全得多。 如果您需要在每個 bash 控制台會話中使用它,也可以將其添加到您的 bash 配置文件中。
ulimit -S -n 2048
your_whatever_greedy_command...
您可以使用另一個值修改 2048。 如果您的貪婪命令正在啟動 mongo,它將是:
ulimit -S -n 2048 && mongod
實際上--numParallelCollections=1
在 OS-X 上為我解決了這個問題,而無需修改系統設置。 我能夠進行以前未完成的完整數據庫還原。 然而,它似乎最大化了連接池,因為我仍然得到2017-06-01T16:55:19.386+0800 E NETWORK [initandlisten] Out of file descriptors. Waiting one second before trying to accept more connections.
2017-06-01T16:55:19.386+0800 E NETWORK [initandlisten] Out of file descriptors. Waiting one second before trying to accept more connections.
在嘗試繼續時。 需要重啟mongod
沒有特定於 MongoDB 的命令行選項來限制mongorestore
或mongod
打開的文件數。 由於 MongoDB 使用內存映射文件,如果您有大量數據文件或連接,您可能會超出默認的 O/S 限制。
特別是 OS X 將每個進程的默認限制設置為 256 個打開文件,而在大多數 Linux 發行版上為 1024 個或更高。 見資源限制在MongoDB的手冊上的資源利用率和限制的詳細信息。
如果您需要打開大量文件,增加 O/S 限制是解決問題的正確方法。 如果您有一個大型數據庫,您還應該避免使用 MongoDB smallFiles
配置選項,因為此選項會增加給定數據集所需的打開文件數(通過減少每個數據文件允許的最大大小)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.