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-max
sysctl割り当て可能なファイルハンドルの数を表示しますシステム全体一方、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_CUR
とINR_OPEN_MAX
include/linux/fs.h:26
:
#define INR_OPEN_CUR 1024 /* nfile rlimitsの初期設定 */ #define INR_OPEN_MAX 4096 /* nfile rlimits のハード制限 */
init
他のプロセスは、(または pid 1 の)制限を単純に継承します。
なぜ/proc/1/limits
Debianでは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 です。