コピペコードで快適生活

明日使えるソースを自分のために

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

確認

$ cat /proc/sys/fs/file-nr
576	0	1636820

file-nr内のパラメータはそれぞれ、

  • オープンされているファイル数
  • 空きファイル管理データの数
  • システム中のオープンファイル管理データの最大数

を示します。

一時的な設定

ログインプロセスとその子プロセスでのみ有効。

# 確認
$ ulimit -n
1024

# 変更
$ ulimit -n 2048

恒久的な設定

システム全体
# 確認
cat /proc/sys/fs/file-nr

$ sudo vi /etc/sysctl.conf
# fs.file-max = 1232457
# を追記する

# 設定を反映
sudo /sbin/sysctl -p

# 確認
cat /proc/sys/fs/file-nr
ユーザごと

nodoc

daemonプロセス

limits.confに設定した値は、ログインしないdameonプロセスには効かないので、
起動スクリプト(/etc/init.d/*)に

ulimit -n 123456

を追記して対応する。

当該プロセスのファイルディスクリプタ上限の確認は下記でわかる。

cat /proc/#{pid}/limits
Limit                     Soft Limit           Hard Limit           Units
# --- 略 ---
Max open files            500000               500000               files
# --- 略 ---

該当プロセスが開いているファイル数はこれで確認できる

ls /proc/#{pid}/fd | wc -l

削除済のファイルを掴んでいるのもわかる

ls -la /proc/#{pid}/fd
# 出てきたリストに (deleted) と表示されていれば、削除済ファイルを掴んでいる

参考にさせていただきました。
@IT:/procによるLinuxチューニング [後編](2/4)

http://mikio.github.io/article/2013/03/02_.html

デーモンごとにulimitで設定した値を確認する - foxtrot0304's diary