ファイルディスクリプタ
Cのプログラムで、あるディレクトリに256ファイル以上を書きこもうとするとopen errorになる、との相談を受けた。
結局何が問題だったかというと、違う階層で同じファイル名のファイルを二つ開き、閉じるのは一か所だけ、という使い方をしたいた為、
ファイルディスクリプタが枯渇してしまったのでした。
結論だけ述べると、なーんだ、という話ですが、今まで知らなかったコマンドも結構あったので、
結論に行きつくまでにググったことをメモ( ..)φメモメモ。
一つのディレクトリに置けるファイル数
MS-DOSの時代には1024個だかの制限があったようですが、対象となるディレクトリはxfsになので全く関係なし。
システムもext3だし。また、書き出しているファイルサイズも123kB程度で微々たるもの。
ファイルディスクリプタの上限
一つのプロセスが開けるファイル数の上限は、ulimitで確認できる。
# ulimit -n
1024
問題のマシンでは1024になっている。
ちなみにこれを変更したいときは /etc/rc.sysinit に追記してsysctl -p すればよいよう。
関連する情報へのリンク
- Solarisで256個制限について 【参考】http://sdc.sun.co.jp/news/2007/08/private/tech_sol0708.html
- 現在開いているファイルハンドル数を見る /proc/sys/fs/file-nr 【参考】http://www.softel.co.jp/blogs/tech/archives/328
- 現在開いているファイルディスクリプタの確認 lsofコマンド