Linuxのファイルディスクリプタ最大値を変更

ファイルディスクリプタは、ファイルオープンなどで使われるポインタのようなもの(Windowsだとハンドルがこれに近い)。アプリケーションにて、ファイルクローズを行わず、ファイルオープン、等を続けると、Too many open files といったエラーが発生することがある。こういった場合の対処として、以下の方法でディスクリプタ最大数を増やすことで、回避できる場合がある。

  • 1.現状の設定値を確認


# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited
Linuxの初期設定のままだと、1024となっている(「open files (-n) 1024」の部分)。なお、以下のオプションでopen filesの設定値だけを求める事も出来る。
# ulimit -n

上記で確認したものはユーザ環境での設定だが、これを増やすにあたりシステム環境でのファイル制限も増やしておく必要がある。

echo "65536 " > /proc/sys/fs/file-max
または
# sysctl -w fs.file-max=65535
設定後の確認コマンドは以下の通り。
# sysctl -a | grep file-max
※設定して即有効になります。OSリブートの必要はなし。ただし、OSがリブートした際にクリアされる。常に有効にしたい場合は、rc.localなどのスクリプトに追加しておく必要がある。

  • 3.ユーザー環境での設定方法

# ulimit -n 65536
設定されたかどうかは、1.の方法で確認できる。