簡體   English   中英

Mongorestore - 打開的文件太多 - mac os x

[英]Mongorestore - too many open files - mac os x

我試圖將一個大數據庫的轉儲導入到我的本地 mongodb 實例。

不幸的是,我發現一個問題,對於導入的集合之一,mongo 拋出異常,即打開了太多文件。

我使用谷歌瀏覽了互聯網的強大知識,我找到了一些使用 ulimit 和 launchctl 的解決方案,但它們沒有用。

最后我通過以下方式解決了這個問題:

  1. 我創建了 /etc/launchd.conf 文件並在那里添加了以下幾行:

limit maxproc 512 1024
    limit maxfiles 16384 32768
  1. 接下來我在終端中執行以下幾行:

sudo sysctl -w kern.maxfilesperproc=16384
    sudo sysctl -w kern.maxfiles=32768
  1. 最后我重新啟動了操作系統。

問題不再發生,但我有疑問。 如果有一些解決方案來限制從 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 的命令行選項來限制mongorestoremongod打開的文件數。 由於 MongoDB 使用內存映射文件,如果您有大量數據文件或連接,您可能會超出默認的 O/S 限制。

特別是 OS X 將每個進程的默認限制設置為 256 個打開文件,而在大多數 Linux 發行版上為 1024 個或更高。 資源限制在MongoDB的手冊上的資源利用率和限制的詳細信息。

如果您需要打開大量文件,增加 O/S 限制是解決問題的正確方法。 如果您有一個大型數據庫,您還應該避免使用 MongoDB smallFiles配置選項,因為此選項會增加給定數據集所需的打開文件數(通過減少每個數據文件允許的最大大小)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM