Mac OS XをYosemiteにアップデートしたところ、一部のアプリケーションが機能しなくなりました(IBM DB2)。オープンファイルを65000に設定する必要があることはわかっていますが、コマンドが機能しません。
Andress-MBP:~ root# ulimit -n 12288
Andress-MBP:~ root# ulimit -n 12289
-sh: ulimit: open files: cannot modify limit: Invalid argument
なぜこれが起こっているのですか?どうすれば問題を修正できますか?
OS Xのバージョンごとに、開いているファイルの制限を変更する方法はまったく異なるようです。
OS X Sierraの場合(10.12.X):
/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>
新しいファイルの所有者を変更します。
Sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
これらの新しい設定をロードします。
Sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
最後に、制限が正しいことを確認します。
launchctl limit maxfiles
この質問をくまなく聞いたことがあると思います。
対処しなければならないカーネル制限があります。kern.maxfilesはカーネル制限であり、ulimitを設定するときに超えることはできません。
Sysctlを使用してkern.maxifilesを操作する方法については、暗号化されたブログページ Mac OS Xの最大ファイル を参照してください。
MacにYosemiteをまだロードしていません。 sysctl -w kern.maxfiles=65000
は、デフォルトで同じkern.maxfiles = 12288制限があるMavericksで機能します。
私は自分のVM OS X 10.6.8を確認しましたが、同じ制限があり、OS Xバージョンの前にそれが以前どのように機能していたかという疑問を引き起こします。
スライド共有( DB2 for Mac OS Xのインストールとセットアップ、DB2 for Mac OS X )があり、DB2を使用するための推奨制限を示しています。システムパラメータの増加ページ7。
システムパラメータを増やします
/etc/sysctl.confを開き(または、まだ存在しない場合は作成し)、次の設定を挿入します。これらの設定により、DB2がMacで動作するために必要な共有メモリとユーザー制限の一部の設定が増えます。
以下を/etc/sysctl.confに追加します
kern.sysv.shmmax = 1073741824
kern.sysv.shmmin = 1
kern.sysv.shmmni = 4096
kern.sysv.shmseg = 32
kern.sysv.shmall = 1179648
kern.maxfilesperproc = 65536
kern.maxfiles = 65536
アップグレードすると/etc/sysctl.conf
ファイルを紛失したようです。
Mac OS 10.10では、ulimit設定はlaunchctl制限設定を超えることができないようです。
したがって、まず現在の設定を取得するには、ターミナルでlaunchctl limit maxfilesを実行する必要があります。
launchctl limit maxfiles
maxfiles 256 unlimited
したがって、私の場合、ソフト制限は256で、ハード制限は無制限です。そして、ソフト制限を512に設定したい場合:
Sudo launchctl limit maxfiles 512 unlimited
制限を設定するためのlaunchctlの詳細な使用法は、ここにあります: https://developer.Apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html