OS X 10.7.1 の「システムで開いているファイルが多すぎます」というエラーを修正する方法はありますか?

OS X 10.7.1 の「システムで開いているファイルが多すぎます」というエラーを修正する方法はありますか?

OS X 10.7.1 の厄介な「システムで開いているファイルが多すぎます」という制限を取り除く必要があります。 

方法はあるでしょうか?

答え1

によるとこの役に立つ記事(ぜひ読んでみてください):

デフォルトでは、Mac OS X が開くことができるファイルの最大数は 12,288 に設定されており、特定のプロセスが開くことができるファイルの最大数は 10,240 です。

これらは以下で確認できます:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

以下の方法で制限を増やすことができます (自己責任で)。

  • sysctl -w kern.maxfiles=20480(または任意の数字)
  • sysctl -w kern.maxfilesperproc=18000(または任意の数字)

変更を永続的にするには、次のように、sudoを使用して設定を入力します/etc/sysctl.conf(設定は作成する必要がある場合があります)。

kern.maxfiles=20480
kern.maxfilesperproc=18000

注: OS X 10.10 以前では、/etc/launchd.conf次のように設定を追加することができlimit maxfiles、ここで入力した内容は上書きされます。

再び記事から引用します。

これを実行すると、カーネル自体には最大数のファイルがありますが、シェルにはない可能性があります。また、この数のファイルを使用するプロセスのほとんどはシェルによって開始されるため、この数を増やす必要があります。

そのためのコマンドは次のとおりです。

ulimit -S -n 2048 # or whatever number you choose

この変更も一時的なもので、現在のシェル セッションでのみ有効です。シェルを開くたびに実行したい場合は、シェル構成ファイル ( など).bashrcに追加できます。.zshrc

答え2

OS X のバージョンごとに、オープンファイルの制限を変更する方法がまったく異なるようです。

OS X Sierraの場合(10.12.X) 次の操作が必要です:

1. にファイルを作成し/Library/LaunchDaemons/limit.maxfiles.plist、次の内容を貼り付けます (2 つの数値 (それぞれソフト制限とハード制限) は自由に変更できます)。

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. 新しいファイルの所有者を変更します:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. 次の新しい設定を読み込みます:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. 最後に、制限が正しいことを確認します。

launchctl limit maxfiles

答え3

他の選択肢としては、犯人を見つけることです:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

最後に、開いているファイルを確認できます。

sudo lsof -n | grep socketfil

必要に応じてプロセスを強制終了します

kill $pid

コメントより:

参考までに、最も多く開いているファイルのプロセスIDのリストを取得するには、次のようにします。

lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail

答え4

皆さん、Mavericks 10.9.4 について

ulimit -n 2048正常に動作します。新しいログイン セッションを起動する必要がある可能性があります。

関連情報