web-dev-qa-db-ja.com

OS X 10.7.1で "システムにオープンファイルが多すぎます"というエラーが修正されますか?

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

方法はありますか?

179
John Wilund

この役に立つ記事によると (これを読むことをお勧めします):

デフォルトでは、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

その変更も一時的です。現在のShellセッションの間だけ持続します。シェルを開くたびに実行したい場合は、シェル設定ファイル(.bashrc.zshrcなど)に追加できます。

219
Nathan Long

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
60
ninjaPixel

あなたはあなたのulimit設定を増やす必要があるでしょう - それは最近のOS Xではかなり低いです - デフォルトでは256です。 ulimit -n 4096をあなたの〜/ .profileまたは同等のものに追加すれば、それはあなたのローカル環境でそれを解決するでしょう。 ulimit -aを実行して現在のレベルを確認してください

システム設定を確認するには、これを実行します。

launchctl limit maxfiles

Lion(10240)では、プロセスごとの基準で以前よりかなり高く設定されています。しかし、それでもまだ打撃を与えているのであれば、希望するレベルで同じコマンドを使用してより高く設定できます。変更を恒久的なものにするには、関連行を追加する必要があります。

31
Adam C

他のオプションは原因を見つけることかもしれません:

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

最後のファイルについては、どのファイルが開かれているかを見ることができます。

Sudo lsof -n | grep socketfil

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

kill $pid

コメントから:

それが価値があるもののために、あなたはまた最もオープンなファイルでプロセスIDのリストを取得することができます。

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

Mavericksの人々、10.9.4

ulimit -n 2048はうまくいきます。新しいログインセッションを開始する必要があるかもしれません。

9
Clustermagnet

最新のmacOS(執筆時:10.14.1)では、Sudo launchctl limit maxfiles 64000 524288(デフォルトでは256)を使用できますが、それは現在のセッション内でのみ機能します。恒久的な解決策としては、@ ninjaPixel(launchctl job)( https://superuser.com/a/1171028/760235 )を使用してください。

2
Dzmitry Hubin

私のJavaの上のすべての変更の後でそれ以上の10000ファイルを作りませんでした。解決策はこのjvmフラグでした - XX:-MaxFDLimit

1
Uros Velickovic

走れます

lsof -n

どのプロセスが多すぎるファイルを開きます。

それを殺します。

または

sysctl -w kern.maxfiles=20480

大きい方に変更してください。

1
SaintKnight

https://superuser.com/a/1171028/367819に似ています

Mac OS Xシステムの現在の制限を確認するには、次のコマンドを実行してください。

launchctl limit maxfiles

最後の2列は、それぞれソフト限界とハード限界です。

Mac OS X Yosemiteでシステム全体でオープンファイルの制限を調整するには、2つの設定ファイルを作成する必要があります。 1つ目は/Library/LaunchDaemons/limit.maxfiles.plist内のプロパティリスト(別名plist)ファイルで、次のXML構成が含まれています。

<?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>200000</string>
          <string>200000</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

2番目のplist設定ファイルは、次の内容で/Library/LaunchDaemons/limit.maxproc.plistに保存する必要があります。

<?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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

両方のplistファイルはroot:wheelによって所有され、パーミッション-rw-r - r--を持っていなければなりません。この権限はデフォルトで設定されているはずですが、Sudo chmod 644を実行することでそれらが設定されていることを確認できます。上記で説明した手順により、再起動時にシステム全体のオープンファイル制限が正しく設定されますが、launchctl制限を実行して手動で適用することができます。

システムレベルでこれらの制限を設定することに加えて、bashrc、bashprofile、または類似のファイルに次の行を追加してセッションレベルでも設定することをお勧めします。

ulimit -n 200000
ulimit -u 2048

Plistファイルと同様に、あなたのbashrcまたは同様のファイルには-rw-r - r--権限が必要です。この時点で、コンピュータを再起動して、端末にulimit -nと入力することができます。システムが正しく設定されていれば、maxfilesが200000に設定されているはずです。


詳しくはこの記事を読んでください。

https://Gist.github.com/tombigel/d503800a282fcadbee14b537735d202c


値を有効にするには、必ずMacを再起動してください。

0
angelokh

Chmod -Rを実行している間に私はそれに遭遇しました。

# for each directory
find . -type d -exec chmod 755 {} \;
0
Michael