現在開いているファイルの数、開けるファイルの最大数を確認するには
$ cat /proc/sys/fs/file-nr
1984 0 24151
一番左が「OS を起動してから今までに開いたファイルの数」
真ん中が「現在開いているファイルの数」
一番右が「開けるファイルの最大数」
正確には、ファイルディスクリプタの数が表示される。
Linux では socket もファイルディスクリプタとして扱われるため、「socket の数 + ファイルの数」 が表示されることに注意。
デバイスには異常がないしメモリにも余裕がある、ポートも競合していないのにファイルが開けないとか、socket が開けないときは /proc/sys/fs/file-nr の数値を確認してみよう。現在開いているファイルディスクリプタの数=開ける上限数になってしまっているかもしれない。
ローカルファイルを扱うアプリで解放漏れはほとんど見かけないが、ネットワーク通信を行うアプリだと socket の生成・解放処理がまともに行われていない ( コンストラクタ・デストラクタ内で生成・解放してるとか例外処理がちゃんと行われてないとか ) こともたまにある。




