FreeBSD QandA 167
Q. ある日 突然 サーバにしているマシンで
Apr 21 07:47:39 svr1 /kernel: file: table is full
というメッセージが出ました。
A. kernel が扱えるファイル数が足りないようです。これは kernel 内の
maxfiles という変数で決められています。これを増やすには kernel
設定ファイルの maxusers を増やして kernel を再構築しましょう。
ident GENERIC
maxusers 32
このパラメータは、/sys/compile/<ident name>/opt_param.h 上で、
#define MAXUSERS 32
というふうに定義され、この MAXUSERS が /sys/conf/param.c で、
#define NPROC (20 + 16 * MAXUSERS)
int maxproc = NPROC; /* maximum # of processes */
int maxfiles = NPROC*2; /* system wide open files limit */
というふうに利用されています。
また この変数は sysctl(8) コマンドを使って動的に変更出来ます。
[参照方法]
# sysctl -A | grep maxfile
kern.maxfiles: 360
kern.maxfilesperproc: 360
[変更方法]
# sysctl -w kern.maxfiles=600
kern.maxfiles: 360 -> 600
起動時に自動的に設定するには、/etc/rc.local を作成して上記のコマンド
を書いておくか、または、3.5R および 4.0R 以降であれば、
/etc/sysctl.conf に次のように記述します。こうしておけば /etc/rc.sysctl
が設定してくれます。
kern.maxfiles=600
間違い・追加情報を見付けた場合は、
修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで
お知らせください。