📁

ファイルディスクリプタ数の上限

2021/09/12に公開

Linux では、同時にオープンできる ファイルディスクリプタ数 が制限されています。
ひとつのプロセス内で多くのファイルオープンをする必要がある場合、この制限に引っかかって、次のようなエラーが起きることがあります。

cannot make pipe for process substitution: Too many open files

これを回避する方法です。

どうすればいいのか?

3つの解決策がある(らしい)

  1. カーネルヘッダファイル中の INR_OPEN の値を書き変えて rebuild する
  2. ulimit -n を使って、一時的に制限を変更する
  3. /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 認証を通らないとこの設定が適用されない。など注意すべきことがありますが、参考記事が詳しいのでそちらを参照してください。

参考記事


Copy from https://qiita.com/tdrk/items/2d232f19861cca117ad5

GitHubで編集を提案

Discussion