📁
ファイルディスクリプタ数の上限
Linux では、同時にオープンできる ファイルディスクリプタ数
が制限されています。
ひとつのプロセス内で多くのファイルオープンをする必要がある場合、この制限に引っかかって、次のようなエラーが起きることがあります。
cannot make pipe for process substitution: Too many open files
これを回避する方法です。
どうすればいいのか?
3つの解決策がある(らしい)
- カーネルヘッダファイル中の
INR_OPEN
の値を書き変えて rebuild する -
ulimit -n
を使って、一時的に制限を変更する -
/etc/security/limits.conf
の設定を書き変え、制限を変更する
カーネルの rebuild は大変なので、1. の手段は却下です。
今回は小さめのシステムであるため、 /etc/security/limits.conf
を書き変える方向で行きます。
/etc/security/limits.conf
を書き変える
このファイルのフォーマットは次のようになっています。
<domain> <type> <item> <value>
次のように追記することで、全ユーザが実行するプロセスごとの最大ファイル数が 2048 と設定できます。
* soft nofile 2048
* hard nofile 2048
PAM 認証を通らないとこの設定が適用されない。など注意すべきことがありますが、参考記事が詳しいのでそちらを参照してください。
Discussion