FreeBSD QandA 167

FreeBSD QandA

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 まで お知らせください。