内容
LinuxのファイルディスクリプタとNGINXのworker_rlimit_nofileとの関係についていろいろ調べた結果をここに記す
ファイルディスクリプタとは
プログラムがアクセスするファイルや標準入出力などのをOSが識別するために用いる識別子のこと
Linuxではすべてを「ファイルとして扱う」インターフェースになっている(未確認)
OSで扱える最大のファイルディスクリプタは以下のコマンドで確認できる
$cat /proc/sys/fs/file-max
プロセスごとの制限の確認
プロセスごとのファイルディスクリプタの最大値を表示する方法
$cat /proc/[pid]/limits
# or
$ulimit -a
ここで表示されるものにSoft limitとHard limitがある
- Soft limit:一般ユーザが変更できる制限でハードリミットを超えることができない
- Hard limit:rootユーザのみ変更できる制限である
NGINXとの関係
worker_rlimit_nofileについて
NGINXの公式ドキュメントには以下のように書かれている
構文: worker_rlimit_nofile number;
ディフォルト: —
環境: main
RLIMIT_NOFILEワーカープロセスの オープンファイルの最大数()の制限を変更します。メインプロセスを再起動せずに制限を増やすために使用されます。
公式ドキュメント:https://nginx.org/en/docs/ngx_core_module.html#worker_rlimit_core
1ワーカプロセスごとのオープンファイルの最大値がここで制限される
なのでこの値と上記のものと関係があると考えている(未実証)
worker_connectionとの関係
worker_connectionにはデフォルトで512
という値が設定されている
これはたぶんファイルディスクリプタのソフトリミットのデフォルトの値が1024
であるからと考えられる