Debian 最大ファイル記述子

Debian 最大ファイル記述子

Debian Lenny。root を含むすべてのユーザーの場合:

# cat /proc/sys/fs/file-max
262144

# sysctl fs.file-max
fs.file-max = 262144

# ulimit -Hn
1024

# ulimit -Sn
1024

ファイルには/etc/security/limits.confコメントされていない行がありません。

1024 はどこから来るのでしょうか?

答え1

fs.file-maxsysctl割り当て可能なファイルハンドルの数を表示しますシステム全体一方、ulimitリソース制限はプロセスごと(またはUIDごと)である。前者については、Documentation/sysctl/fs.txt:90:

ファイル最大数とファイル番号:

file-maxの値は、ファイルの最大数を示します。
Linuxカーネルが割り当てるハンドル。
ファイルハンドルが不足しているというエラーメッセージが表示される場合は、
この制限を増やしたい。

1024ファイルrlimitはどこにも明示的に設定されていません。これは、pid 1のデフォルト値としてカーネルにハードコードされています。include/asm-generic/resource.h:81:

/*
 * init タスクのブート時の rlimit のデフォルト:
 */
#INIT_RLIMITS を定義する \
{\
        ...
        [RLIMIT_NOFILE] = { INR_OPEN_CUR、INR_OPEN_MAX }、\
        ...
}

参照元INR_OPEN_CURINR_OPEN_MAXinclude/linux/fs.h:26:

#define INR_OPEN_CUR 1024 /* nfile rlimitsの初期設定 */
#define INR_OPEN_MAX 4096 /* nfile rlimits のハード制限 */

init他のプロセスは、(または pid 1 の)制限を単純に継承します。

なぜ/proc/1/limitsDebianでは1024がソフトとして報告されるのかそして難しいnfile 制限? わかりません。sysvinit ソースも Debian カーネル パッチもこれを変更しません。おそらく initramfs スクリプトが原因かもしれません。(私はデフォルトで 1024/4096 の Arch を実行しています。)

答え2

@grawity が提起した質問については、このカーネルコミットで説明できます。

コミット 0ac1ee0bfec2a4ad118f907ce586d0dfd8db7641
著者: ティム・ガードナー
日付: 2011 年 5 月 24 日火曜日 17:13:05 -0700

    ulimit: ファイル数のデフォルトのハード ulimit を 4096 に引き上げます

少なくとも RHEL5.4 では 1024/1024、RHEL6.2 では 1024/4096 です。

関連情報