<!--
     The FreeBSD Documentation Project
     The FreeBSD Japanese Documentation Project

     Original revision: 1.4
     $FreeBSD$
-->

<chapter id="config-tuning">
  <title>設定とチューニング</title>

  <para>この章は &a.msmith; と &a.dillon; によって書かれたものをもとに、
    &a.chern; と &a.murray によって書かれました。</para>

  <sect1>
    <title>この章では</title>

    <indexterm><primary>System configuration</primary></indexterm>
    <indexterm><primary>System optimization</primary></indexterm>

    <para>システムを正しく設定することは、
      作業の量を減らしメンテナンスや将来の更新の際の困難を減らします。
      この章では FreeBSD システムの管理上の設定の側面について記述します。</para>

    <para>またこの章では FreeBSD システムのパフォーマンスを最適化する
      チューンについても記述します。</para>

  </sect1>

  <sect1 id="configtuning-initial">
    <title>初期設定</title>

    <sect2>
      <title>パーティションのレイアウト</title>

      <indexterm><primary>パーティションレイアウト</primary></indexterm>
      <indexterm><primary>/etc</primary></indexterm>
      <indexterm><primary>/var</primary></indexterm>
      <indexterm><primary>/usr</primary></indexterm>

      <sect3>
	<title>基本パーティション</title>

	<para>ファイルシステムのレイアウトを &man.disklabel.8; や
	  &man.sysinstall.8; で行う際、ハードディスクの外周部は
	  内周部よりもデータ転送が速いということを覚えておくことが大事です。
	  これに従えば、
	  ルートやスワップのような小さくて激しくアクセスされるファイルシステムを外周付近に、
	  /usr のようなより大きなパーティションはその内側に配置すべきでしょう。
	  そうするなら、パーティションを作成する際には、ルート、スワップ、
	  <filename>/var</filename>、<filename>/usr</filename>
	  のような順で作ってゆくのがよいでしょう。</para>

	<para><filename>/var</filename> パーティションのサイズは
	  あなたが計算機をどのように使おうとしているかを反映します。
	  <filename>/var</filename> は主としてメールボックスやプリントスプール、
	  ログファイルの保持に使われます。
	  特にメールボックスとログファイルは、
	  あなたのシステムのユーザ数やログの保持期間に依存して予期し得ぬサイズにまで成長します。
	  もしあなたがメールサーバを運用する予定なら <filename>/var</filename>
	  パーティションはギガバイト以上のものがよいでしょう。
	  さらに、<filename>/var/tmp</filename> は追加したくなるかもしれない
	  パッケージを収められるだけの大きさが必要です。</para>

	<para><filename>/usr</filename> パーティションはシステムを
	  サポートするのに必要なファイル群と、
	  &man.ports.7; 階層からインストールされたファイル群を収める
	  <filename>/usr/local</filename> と呼ばれるサブディレクトリを
	  その中に含みます。
	  ports をまったく使わずシステムのソース (/usr/src) 
	  も不要だというのであれば、1 ギガバイトの /usr
	  パーティションだけで充分です。  しかし、ports
	  (特にウィンドウマネージャや Linux エミュレーションを使うバイナリ)
	  を少なからずインストールするのであれば
	  少なくとも /usr に 2 ギガバイトを薦め、
	  システムのソースも置こうというなら 3 ギガバイトの
	  <filename>/usr</filename> を推奨します。
	  このパーティションで必要になる量を過小評価してはいけません。
	  それは驚く程に蔓延るものなのです!</para>

	<para>パーティションのサイズを考える時、
	  必要量にシステムの成長分を見込んでおいてください。
	  別のパーティションには潤沢にスペースが余っているのに、
	  あるパーティションでスペースが足らないままというのは
	  フラストレーションがたまるものです。</para>

	<note><para>&man.sysinstall.8; の <literal>Auto-defaults</literal>
	    パーティションサイズを使ったことのある人なら、
	    そのルートや <filename>/var</filename> パーティションが
	    小さすぎることを知っているでしょう。
	    賢明かつ気前よくパーティションを切ってください。</para></note>

      </sect3>

      <sect3>
	<title>スワップパーティション</title> 

	<indexterm><primary>swap サイズ</primary></indexterm>
	<indexterm><primary>swap パーティション</primary></indexterm>

	<para>経験からスワップサイズはメインメモリの 2 倍というのが一般的です。
	  つまり、計算機のメモリが 128 メガバイトならばスワップファイルは
	  256 メガバイトになります。  メモリの少ないシステムでは、
	  もっとスワップを増した方が性能がよくなります。  256
	  メガバイト未満のスワップでシステムを設計することはお薦めできません。
	  またスワップサイズを決める時に、
	  将来のメモリ増設のことも考えておくべきです。
	  カーネルの VM (訳註: virtual memory(仮想メモリ))
	  ページングアルゴリズムはスワップパーティションがメインメモリの
	  2 倍以上存在するときに最も性能を発揮するように設計されています。
	  スワップが少なすぎる設定は、
	  あなたが後にメモリを増設したときに問題を起すばかりではなく、
	  VM ページスキャニングのコードの能率を落します。</para>

	<para>最後に、複数の SCSI ディスク
	  (や異なるコントローラで操作される複数の IDE ディスク)
	  を持つ大規模なシステムでは、それぞれのドライブ
	  (4 台まで) にスワップを設定することを強く推奨します。
	  各ドライブのスワップパーティションはほぼ同一サイズであるべきです。
	  カーネルは任意のサイズを扱うことができますが、
	  内部のデータ構造は最大のスワップパーティションの 4 倍に調節されます。
	  スワップパーティションをほぼ同一のサイズにしておくことで
	  カーネルはスワップスペースを最適なかたちで
	  ディスクをまたいでストライブさせることができます。
	  こだわりすぎる必要はありません。
	  スワップスペースは UNIX のつつましい美点です。
	  あなたが通常スワップをたくさん使わないとしても、
	  プログラムが暴走してもリブートさせられる前に回復する時間を多く得られます。</para>
      </sect3>

      <sect3>
	<title>何故パーティション化するのか?</title>

	<para>何故パーティション化してしまうのでしょう?
	  何故巨大な root パーティション一発では駄目なのでしょう?
	  そうすれば容量が溢れるかもと心配しなくてもすむのに!</para>

	<para>いくつかの理由からそれはよいアイデアとは言えません。
	  まず各パーティションはアクセスの特徴がそれぞれ異なっていて、
	  分離しておくことでそれぞれの特徴に応じたチューンができるようになるからです。
	  root パーティションや <filename>/usr</filename>
	  パーティションはほとんどが読み出しでわずかな書き込みがあるだけですが
	  <filename>/var</filename> や <filename>/var/tmp</filename>
	  パーティションでは大量の読み書きが発生します。</para>

	<para>システムを適切にパーティション化することで
	  小さいが書き込みの激しいパーティションによって引き起こされる
	  フラグメント化を読み出し専門のパーティションにまで波及させずにすみます。
	  また書き込みの激しいパーティションをディスクの周辺部に配置することで、
	  たとえばパーティションテーブル内で大きなパーティションの後のかわりに前に配置することで、
	  それが最も必要とされているパーティションの
	  I/O パフォーマンスを増大させることができます。
	  大きなパーティション内の I/O
	  パフォーマンスもまた必要とされているでしょうが、
	  それらは大きすぎてディスク周辺部へ移動させてやったとしても
	  <filename>/var</filename>
	  を周辺部に移動させることによって大きな効果が得られたのとは対照的に
	  意味のあるパフォーマンスの増加は見込めないでしょう。
	  基本的にリードオンリーな root
	  パーティションを小さくまとめておくことで
	  不幸なクラッシュを生き延びるチャンスが増大します。</para>
      </sect3>
    </sect2>

  </sect1>

  <sect1 id="configtuning-core-configuration">
    <title>中核となる設定</title>

    <indexterm>
      <primary>rc files</primary>
      <secondary><filename>rc.conf</filename></secondary>
    </indexterm>

    <para>システムの設定情報が収められている主な場所は
      <filename>/etc/rc.conf</filename> です。
      このファイルにはシステムの起動時にシステムの設定を行なうものをはじめ
      多岐に渡る設定情報が含まれています。
      そのファイル名はダイレクトに、それが <filename>rc*</filename>
      ファイル群の設定情報であることを示しています。</para>

    <para>管理者は <filename>/etc/defaults/rc.conf</filename>
      のデフォルトの設定を rc.conf ファイルにエントリを作ることで上書きすべきです。
      デフォルトのファイルをそのまま <filename>/etc</filename>
      にコピーするのはやめるべきです。
      それはデフォルト値であってサンプルではないのです。
      システム固有のすべての変更は rc.conf ファイルの中でするべきです。</para>

    <para>管理の手間を減らす為、クラスター化されたアプリケーションには
      サイト共通の設定とシステム固有の設定を分離する様々な戦略が適用できます。
      推奨されるアプローチは、サイト共通の設定は
      <filename>/etc/rc.conf.site</filename> のような別のファイルに置き、
      それをシステム固有の設定情報しか含ませない
      <filename>/etc/rc.conf</filename> からインクルードすることです。</para>

    <para><filename>rc.conf</filename> は &man.sh.1;
      によって読み込まれているので、これはじつに簡単に達成できます。
      たとえば、</para>

    <itemizedlist>
      <listitem><para>rc.conf:</para>
<programlisting>	. rc.conf.site
	hostname="node15.webcompany.com"
	network_interfaces="fxp0 lo0"
	ifconfig_fxp0="inet 10.1.1.1"</programlisting></listitem>
      <listitem><para>rc.conf.site:</para>
<programlisting>	defaultrouter="10.1.1.254"
	saver="daemon"
	blanktime="100"</programlisting></listitem>
    </itemizedlist>

    <para><filename>rc.conf.site</filename> ファイルは
      <command>rsync</command> 等を使うことで全システムに配布でき、
      一方 <filename>rc.conf</filename>
      ファイルはユニークなままを保つことができます。</para>

    <para>システムを &man.sysinstall.8; や 'make world' 等で
      更新した場合 rc.conf ファイルは上書きされません。
      なのでシステムの設定情報が失われることもありません。</para>

  </sect1>

  <sect1 id="configtuning-appconfig">
    <title>アプリケーションの設定</title>

    <para>基本的に、インストールされたアプリケーションは独自の文法を持つ
      固有の設定ファイルを持ちます。
      これらのファイルがベースシステムから分離されているということは重要で、
      このためパッケージ管理ツールによる配置と管理が容易になっています。</para>

    <indexterm><primary>/usr/local/etc</primary></indexterm>

    <para>基本的に、それらのファイルは <filename>/usr/local/etc</filename>
      にインストールされます。
      設定ファイルの数が多数にのぼるアプリケーションに対しては、
      それら用にサブディレクトリが作られます。</para>

    <para>通常、ports やパッケージがインストールされると
      設定ファイルのサンプルが一緒にインストールされます。
      大抵、識別のためにサフィックスとして ".default" がついています。
      アプリケーションのための設定ファイルがまだ存在していなければ、
      .defaults ファイルをコピーすることで作成できます。</para>

    <para>以下は
    <filename>/usr/local/etc/apache</filename> の例です。</para>

<literallayout class="monospaced">-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf
-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf.default
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf.default
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic.default
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types.default
-rw-r--r--  1 root  wheel   7980 May 20  1998 srm.conf
-rw-r--r--  1 root  wheel   7933 May 20  1998 srm.conf.default</literallayout>

    <para>srm.conf ファイルだけが変更されていることが即座に見てとれるでしょう。
      後に apache を更新した時にも、
      この変更されたファイルは上書きされることはありません。</para>

  </sect1>

  <sect1 id="configtuning-starting-services">
    <title>サービスの起動</title>

    <indexterm><primary>サービス</primary></indexterm>

    <para>一つのシステムでサービスをいくつも立ち上げているということは
      よくあることです。  それらには独自の立ち上げかたがあることがあり、
      それぞれ有利な点があります。</para>

    <indexterm><primary>/usr/local/etc/rc.d</primary></indexterm>

    <para>Ports collection やパッケージからインストールしたソフトウェアは
      しばしば <filename>/usr/local/etc/rc.d</filename> にスクリプトを置き、
      システムが起動した時には 'start'、システムをシャットダウンする時には
      'stop' の引数をつけてこれを実行します。
      これは root によって実行されるべきであるようなシステムワイドな
      サービスを起動する場合に推奨される方法です。
      これらのスクリプトはパッケージの一部としてインストール時に記録され、
      パッケージとともに削除されます。</para>

    <para><filename>/usr/local/etc/rc.d</filename> にある
      一般的なスクリプトは次のようなものです。</para>

    <programlisting>#!/bin/sh
echo -n ' FooBar'

case "$1" in
start)
        /usr/local/bin/foobar
        ;;
stop)
        kill -9 `cat /var/run/foobar.pid`
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        exit 64
        ;;
esac

exit 0
    </programlisting>

    <para>このスクリプトはその目的を果すべく起動時に <option>start</option>、
      シャットダウン時に <option>stop</option> をつけて呼ばれます。</para>

    <para>サービスの中には固有のポートに接続を受けたときに
      &man.inetd.8; から起動されるものもあります。
      これはメールリーダサーバ (POP や IMAP 等) の場合によくあります。
      これらのサービスは <filename>/etc/inetd.conf</filename>
      ファイルを編集することで有効化されます。
      このファイルの編集に関する詳細は &man.inetd.8; を見てください。</para>

    <para>これらの他に <filename>/etc/rc.conf</filename>
      による有効化/無効化がカバーされていないサービスもあります。
      それらは伝統的に <filename>/etc/rc.local</filename>
      にコマンドを書き込むことで実行されていました。
      FreeBSD 3.1 にはデフォルトの <filename>/etc/rc.local</filename>
      は存在していません。  もし管理者によって作られていれば、
      その時は一般的なやりかたとして認められるべきでしょう。
      <filename>rc.local</filename> は最後の場所と考えられているということを
      知っておいてください。  サービスを起動させるのにもっといい場所があるなら
      そこから始めてください。</para>

    <note><para><filename>/etc/rc.conf</filename>
      でその他のコマンドを実行<emphasis>しないでください</emphasis>。
      そのかわり、デーモンの起動やブート時のコマンド実行は
      <filename>/usr/local/etc/rc.d</filename> にスクリプトを配置してください。</para>
    </note>

    <para>この他にサービスの起動に &man.cron.8; を利用することもできます。
      このアプローチには、cron がそのプロセスを
      crontab のオーナ権限で実行したり、サービスが非特権ユーザによって
      立ち上げられ管理されるなどといった有利な点がいくつもあります。</para>

    <para>これで cron の文書化されていない機能の利点を得ることができます。
      日時の指定を '@reboot' で置き換えることでジョブは
      システムがブートした直後、cron が起動した時に実行されます。</para>
  </sect1>

  <sect1 id="configtuning-virtual-hosts">
    <title>バーチャルホスト</title>

    <indexterm><primary>バーチャルホスト</primary></indexterm>
    <indexterm><primary>ip aliases</primary></indexterm>

    <para>FreeBSD の非常にありふれた用途の一つにバーチャルサイトの
      ホスティングがあります。
      これは一つのサーバがネットワークには複数のサーバとして現れるものです。
      これは一つのネットワークインタフェイスに
      複数のアドレスを割当てることで実現されます。</para>

    <para>ネットワークインタフェイスは "真の" アドレスを一つと
      "別名" のアドレスを複数持ちます。  これらの別名は通常
      <filename>/etc/rc.conf</filename>
      に別名のエントリを置くことで追加されます。</para>

    <para>'fxp0' インタフェイスへの別名のエントリは以下の様なものです。</para>

<programlisting>ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"</programlisting>

    <para>別名のエントリは alias0 から始まり _alias1、_alias2
      の様に増加してゆかなければなりません。  設定プロセスは
      最初に欠けた番号のところで停まります。</para>

    <para>別名のネットマスクの計算は重要ですが、幸いなことに非常に簡単です。
      個々のインタフェイスについてそのネットワークのネットマスクを正しく
      表現しているアドレスが必ず一つ必要です。
      そのネットワークに所属しているそれ以外のアドレスのネットマスクは
      全て 1 でなければなりません。</para>

    <para>例として、fxp0 インタフェイスが二つのネットワークに接続されている
      ものを考えてみましょう。  一つはネットマスクが 255.255.255.0 である
      10.1.1.0 ネットワークで、もう一つはネットマスクが 255.255.255.240 である
      202.0.75.16 ネットワークです。  システムは 10.1.1.0 には 10.1.1.1 として、
      202.0.75.20 には 202.0.75.17 として現れるようにします。</para>

    <para>以下のエントリはネットワークインタフェイスを上述の環境に正しく
      設定するものです。</para>

<programlisting> ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
 ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
 ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
 ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
 ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
 ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
 ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
 ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
 ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"</programlisting>

  </sect1>

  <sect1 id="configtuning-configfiles">
    <title>設定ファイル</title>

    <sect2>
      <title><filename>/etc</filename> のレイアウト</title>
      <para>設定のための情報が含まれているディレクトリはたくさんあります。
	それぞれ以下のものを含んでいます。</para>

      <informaltable frame="none">
	<tgroup cols="2">
	  <tbody>
	    <row>
	      <entry><filename>/etc</filename></entry>
	      <entry>システム全般の設定情報。  ここにあるデータはシステム
	        固有のものです。</entry>
	    </row>
	    <row>
	      <entry><filename>/etc/defaults</filename></entry>
	      <entry>デフォルトのシステム設定ファイル。</entry>
	    </row>
	    <row>
	      <entry><filename>/etc/mail</filename></entry>
	      <entry>追加的な sendmail の設定、他の MTA の設定ファイル。
	      </entry>
	    </row>
	    <row>
	      <entry><filename>/etc/ppp</filename></entry>
	      <entry>ユーザモード、およびカーネルモードの ppp プログラムの設定。
	      </entry>
	    </row>
	    <row>
	      <entry><filename>/etc/namedb</filename></entry>
	      <entry>bind(8) のデータのデフォルトの置場。  通常
		boot ファイルはここに置かれ、/var/db に置かれた他のデータを
		参照するディレクティブを含みます。</entry>
	    </row>
	    <row>
	      <entry><filename>/usr/local/etc</filename></entry> 
	      <entry>インストールされたアプリケーションの設定ファイル。
		アプリケーションごとのサブディレクトリを含んでいることがあります。</entry>
	    </row>
	    <row>
	      <entry><filename>/usr/local/etc/rc.d</filename></entry>
	      <entry>インストールされたアプリケーションの起動/停止スクリプト。</entry>
	    </row>
	    <row>
	      <entry><filename>/var/db</filename></entry>
	      <entry>永続的なシステム固有のデータファイル。 たとえば
	        bind(8) のゾーンファイル、データベースファイル等。</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>
    </sect2>

    <sect2>
      <title>ホスト名</title>

      <indexterm><primary>hostnames</primary></indexterm>
      <indexterm><primary>DNS</primary></indexterm>

      <sect3>
	<title>/etc/resolv.conf</title>

	<indexterm><primary>resolv.conf</primary></indexterm>

	<para><filename>/etc/resolv.conf</filename> は FreeBSD に
	  インターネットドメインネームシステム (DNS) 
	  にどのようにアクセスするかを指定します。</para>

	<para><filename>resolv.conf</filename> の最もよくあるエントリは
	</para>
      
	<informaltable frame="none">
	  <tgroup cols="2">
	    <tbody>
	      <row>
		<entry><literal>nameserver</literal></entry> 
		<entry>リゾルバが問い合わせるべきネームサーバの IP アドレス。
		  サーバはリストの順に 3 番目まで問い合わせられます。</entry>
	      </row>
	      <row>
		<entry><literal>search</literal></entry>
		<entry>ホスト名をルックアップする検索リスト。
		  通常、ローカルなホスト名のドメインから決定されます。</entry>
	      </row>
	      <row>
		<entry><literal>domain</literal></entry>
		<entry>ローカルドメイン名。</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>基本的な <filename>resolv.conf</filename>。</para>

	<programlisting>search foobar.com
nameserver 147.11.1.11
+nameserver 147.11.100.30</programlisting>

	<para>&man.dhclient.8; は通常 <filename>resolv.conf</filename> 
	  を DHCP サーバから受け取った情報で書き換えます。</para>
      </sect3>

      <sect3>
	<title><filename>/etc/hosts</filename></title>

	<indexterm><primary>hosts</primary></indexterm>
	
	<para><filename>/etc/hosts</filename> は古きインターネットを
	  偲ばせるシンプルなテキストのデータベースです。
	  これはホスト名と IP アドレスをマッピングする DNS や NIS
	  と組み合わせて使われます。  LAN でつながれているローカルな計算機は、
	  名前引きを簡単にするために
	  &man.named.8; サーバを立ち上げるかわりにここに書くことができます。
	  さらに <filename>/etc/hosts</filename>
	  はインターネット名のローカルなレコードを提供し、
	  よくアクセスされる名前を外部に問い合わせるのを減らすためにも使えます。</para>

	<programlisting># &dollar;FreeBSD$
#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1                     localhost localhost.my.domain myname.my.domain
127.0.0.1               localhost localhost.my.domain myname.my.domain

#
# Imaginary network.
#10.0.0.2               myname.my.domain myname
#10.0.0.3               myfriend.my.domain myfriend
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
#       10.0.0.0        -   10.255.255.255
#       172.16.0.0      -   172.31.255.255
#       192.168.0.0     -   192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers.  PLEASE PLEASE PLEASE do not try
# to invent your own network numbers but instead get one from your
# network provider (if any) or from the Internet Registry (ftp to
# rs.internic.net, directory `/templates').
#</programlisting>

	<para><filename>/etc/hosts</filename> は、
          次のようなごく簡単なフォーマットになっています。</para>

	<programlisting>[インターネットアドレス] [正式なホスト名] [別名1] [別名2] ...</programlisting>

	<para>例:</para>

	<programlisting>10.0.0.1 myRealHostname.foobar.com myRealHostname foobar1 foobar2</programlisting>

	<para>これ以上の情報は &man.hosts.5; をあたってください。</para>
      </sect3>
    </sect2>

    <sect2>
      <title>ログファイルに関係する設定</title>
     
      <indexterm><primary>log files</primary></indexterm>
      
      <sect3>
	<title><filename>syslog.conf</filename></title>
	
	<indexterm><primary>syslog.conf</primary></indexterm>
	
	<para><filename>syslog.conf</filename>
	  は &man.syslogd.8; プログラムのための設定ファイルです。
	  これはどのタイプの syslog メッセージを対応する
	  ログファイルに記録するかを指定します。</para>

	<programlisting># $FreeBSD&dollar;
#
#       Spaces ARE valid field separators in this file. However,
#       other *nix-like systems still insist on using tabs as field
#       separators. If you are sharing this file between systems, you
#       may want to use only tabs as field separators here.
#       Consult the syslog.conf(5) manpage.
*.err;kern.debug;auth.notice;mail.crit          /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.*                                      /var/log/security
mail.info                                       /var/log/maillog
lpr.info                                        /var/log/lpd-errs
cron.*                                          /var/log/cron
*.err                                           root
*.notice;news.err                               root
*.alert                                         root
*.emerg                                         *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info                                   /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.*                                            /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.*                                            @loghost
# uncomment these if you're running inn
# news.crit                                     /var/log/news/news.crit
# news.err                                      /var/log/news/news.err
# news.notice                                   /var/log/news/news.notice
!startslip
*.*                                             /var/log/slip.log
!ppp
*.*                                             /var/log/ppp.log</programlisting>

	<para>これ以上の情報は &man.syslog.conf.5; のマニュアルページに
	  あたってください。</para>
      </sect3>

      <sect3>
	<title><filename>newsyslog.conf</filename></title>

	<indexterm><primary>newsyslog.conf</primary></indexterm>
	
	<para><filename>newsyslog.conf</filename> は &man.newsyslog.8;
	  のための設定ファイルで、
	  通常 &man.cron.8; によって実行されるプログラム &man.newsyslog.8;
	  がログファイルをいつ保存して再編するかを決定します。
	  <filename>logfile</filename> は <filename>logfile.1</filename>
	  に移され、<filename>logfile.1</filename> は
	  <filename>logfile.2</filename> に、そして以下同様に移されます。
	  さらにログファイルを gzip 形式で保存することもできます。
	  この場合ファイル名は logfile.0.gz、logfile.1.gz
	  の様になります。</para>

	<para><filename>newsyslog.conf</filename>
	  はどのログファイルが管理され、どのくらいの期間保存され、
	  そしていつ touch されるかを指定します。
	  ログファイルはあるサイズに到達するか、ある決められた時刻・
	  日時で再編されあるいは保存されます。</para>
	
	<programlisting># configuration file for newsyslog
# $FreeBSD&dollar;
#
# logfilename          [owner:group]    mode count size when [ZB] [/pid_file] [sig_num]
/var/log/cron                           600  3     100  *     Z
/var/log/amd.log                        644  7     100  *     Z
/var/log/kerberos.log                   644  7     100  *     Z
/var/log/lpd-errs                       644  7     100  *     Z
/var/log/maillog                        644  7     *    @T00  Z
/var/log/sendmail.st                    644  10    *    168   B
/var/log/messages                       644  5     100  *     Z
/var/log/all.log                        600  7     *    @T00  Z
/var/log/slip.log                       600  3     100  *     Z
/var/log/ppp.log                        600  3     100  *     Z
/var/log/security                       600  10    100  *     Z
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/daily.log                      640  7     *    @T00  Z
/var/log/weekly.log                     640  5     1    $W6D0 Z
/var/log/monthly.log                    640  12    *    $M1D0 Z
/var/log/console.log                    640  5     100  *     Z</programlisting>

	<para>これ以上の情報は &man.newsyslog.8; のマニュアルページに
	  あたってください。</para>
      </sect3>
    </sect2>

    <sect2>
      <title><filename>sysctl.conf</filename></title>

      <indexterm><primary>sysctl.conf</primary></indexterm>
      <indexterm><primary>sysctl</primary></indexterm>

      <para><filename>sysctl.conf</filename> は
	<filename>rc.conf</filename> によく似ています。
	値は変数=値のかたちでセットされます。
	指定された値はシステムがマルチユーザモードに移行した後でセットされます。
	すべての変数がこのモードで設定可能というわけではありません。</para>

      <para>以下は <filename>sysctl.conf</filename> のサンプルで
        致命的なシグナルを記録しないように、また Linux プログラムに
	それらが実際は FreeBSD 上で動いていることを知らせる様に
	チューニングしています。</para>

      <programlisting>kern.logsigexit=0       # Do not log fatal signal exits (e.g. sig 11)
compat.linux.osname=FreeBSD
compat.linux.osrelease=4.3-STABLE</programlisting>

    </sect2>
  </sect1>

  <sect1 id="configtuning-sysctl">
    <title>sysctl によるチューニング</title>

    <indexterm><primary>sysctl</primary></indexterm>
    <indexterm><primary>sysctl によるチューニング</primary></indexterm>
    
    <para>&man.sysctl.8; は稼働中の FreeBSD
      システムに変更を加えるためのインタフェイスです。
      これには経験を積んだ管理者用の TCP/IP スタックへや
      仮想メモリシステムのパフォーマンスを劇的に改善する
      先進的なオプションが含まれます。
      500 を越えるシステム変数を &man.sysctl.8; で読んだり
      セットしたりできます</para>
    
    <para>中心において &man.sysctl.8; の機能は以下の二つに尽きます。
      すなわちシステムの設定を読んで変更することです。</para>

    <para>読むことができるすべての変数を表示するには以下のようにします。</para>

    <screen>&prompt.user; <userinput>sysctl -a</userinput></screen>
    
    <para>個々の変数、たとえば
      <literal>kern.maxproc</literal> を読むには以下のようにします。</para>
    
    <screen>&prompt.user; <userinput>sysctl kern.maxproc</userinput>
kern.maxproc: 1044</screen>

    <para>個々の変数をセットするには <literal>=</literal>
      オプションを使います。</para>

    <screen>&prompt.root; <userinput>sysctl kern.maxfiles=5000</userinput>
kern.maxfiles: 2088 -> 5000</screen>

    <para>sysctl 変数の値は通常、文字列、数値、真偽値のいずれかです。
      真偽値は yes の場合には 1 で no の場合には 0 です。</para>
  </sect1>

  <sect1 id="configtuning-disk">
    <title>ディスクのチューニング</title>

    <sect2>
      <title>sysctl 変数</title>

      <sect3>
	<title>vfs.vmiodirenable</title>
     
	<indexterm><primary>vfs.vmiodirenable</primary></indexterm>
	
	<para><varname>vfs.vmiodirenable</varname> sysctl
	はデフォルトは 0 (オフ) であり (しかし近いうちにデフォルトが 1
	になるでしょう)、0 (オフ) または 1 (オン) にセットすることができます。
	このパラメータはディレクトリがシステムによってどのように
	キャッシュされるかを制御します。
	ほとんどのディレクトリは小さく、
	ファイルシステムにおいては単一フラグメント (典型的には 1K)
	であり、バッファキャッシュではさらに小さくなっています
	(典型的には 512 バイト)。
	しかしデフォルトモードで動作している時は、
	大量のメモリを搭載していても
	バッファキャッシュは固定数のディレクトリしかキャッシュしません。
	この sysctl をオンにすると、バッファキャッシュが VM ページキャッシュを、
	ディレクトリをキャッシュするために使うことを可能にします。
	これによる利点は、全てのメモリがディレクトリを
	キャッシュするのに使えるようになるということです。
	欠点は、キャッシュに使われる最小のメモリの大きさが 512 バイトではなく
	物理ページサイズ (大抵は 4K) になることです。
	多数のファイルを操作するサービスを稼動しているなら、
	常にこのオプションをオンにすることを推奨します。
	そのようなサービスには、web キャッシュや大規模なメールシステム、
	ニューズシステムなどが含まれます。
	このオプションは一般にメモリを消費しますが、
	性能を削減することはありません。
	ただし実験して調べてみるべきでしょう。</para>
      </sect3>
     
      <sect3>
	<title>hw.ata.wc</title>
      
	<indexterm><primary>hw.ata.wc</primary></indexterm>

	<para>FreeBSD 4.3 では IDE のライトキャッシュがオフになりました。
	  これは IDE
	  ディスクへの書き込み帯域幅を減らしてしまうことになりますが、
	  ハードドライブベンダに起因するデータの一貫性に関する
	  重大な問題のために必要なことだと考えられました。
	  基本的には、書き込み完了時期について IDE
	  ドライブが嘘をつくという問題です。
	  IDE ライトキャッシュがオンであると
	  IDE ハードドライブはデータを順番に書きこまないばかりか、
	  ディスクの負荷が高い時にはいくつかのブロックの書き込みを
	  無期限に延期してしまいます。  クラッシュや電源故障の場合、
	  ファイルシステムの重大な破壊をもたらします。
	  したがって私たちはデフォルトを安全側に変更しました。
	  残念ながらこれは大変な性能の低下をもたらし、
	  私たちはあきらめてこのリリース後にオンに戻しました。
	  hw.ata.wc sysctl 変数を見てデフォルトをチェックしてみるべきです。
	  もし IDE ライトキャッシュがオフになっていたら、
	  hw.ata.wc カーネル変数を 1 に戻すことでオンに戻すことができます。
	  これはブート時にブートローダから行わなければなりません。
	  カーネルがブートした後に行っても効果はありません。</para>
	
	<para>&man.ata.4; を見てください。</para>
      </sect3>
    </sect2>

    <sect2>
      <title>ソフトアップデート</title>

      <indexterm><primary>ソフトアップデート</primary></indexterm>
      <indexterm><primary>tunefs</primary></indexterm>
      
      <para>&man.tunefs.8; はファイルシステムを fine チューンするのに使えます。
        この目的においてはソフトアップデートをオンオフすることを
	考えるだけですみます。  以下の様にしてトグルします。</para>

      <screen>&prompt.root; tunefs -n enable /filesystem
&prompt.root; tunefs -n disable /filesystem</screen>

      <para>ファイルシステムはマウントされているあいだは &man.tunefs.8;
        で変更することができません。  ソフトアップデートを有効にする
	いい機会はシングルユーザモードでどのパーティションもマウント
	されていない時です。</para>

      <para>softupdates はメタデータの性能、
        主にファイルの作成と削除の性能を劇的に改善します。
	全てのファイルシステムで softupdates を有効にすることを推奨します。
	softupdates に関して、2 つの欠点を意識すべきです。
	1 つめは、softupdates
	はクラッシュ時におけるファイルシステムの一貫性は保証しますが、
	物理ディスクの更新が何秒か (1 分になることもあります!)
	遅れる可能性が高いことです。
	クラッシュした場合、より多くの成果が消えてしまうかもしれません。
	2 つめは、softupdates
	はファイルシステムブロックを解放するのを遅らせるということです。
	あるファイルシステム (例えばルートファイルシステム) が満杯近くの時に
	それに対する大規模な更新、たとえば make installworld
	をすると、空き領域を使い果たして更新が失敗してしまうことがあります。
      </para>
    </sect2>
  </sect1>

  <sect1 id="configtuning-kernel-limits">
    <title>kernel の制限をチューニングする</title>

    <indexterm><primary>kernel の制限をチューニングする</primary></indexterm>
    
    <sect2>
      <title>File/process 制限</title>

      <sect3>
	<title>kern.maxfiles</title>

	<indexterm><primary>kern.maxfiles</primary></indexterm>
	
	<para><varname>kern.maxfiles</varname> はあなたのシステムの要求に
	  応じて増減させることができます。
	  この変数はあなたのシステムのファイル記述子の最大値を示します。
	  ファイル記述子テーブルが溢れるような時には dmesg に頻繁に
	  <literal>file: table is full</literal>
	  と表示されます。</para>

	<para>ファイル、ソケット、パイプ(fifo) は
	  それぞれオープンされるとファイル記述子を一つ消費します。
	  大規模なプロダクションサーバでは
	  その時実行されているサービスの種類や数に応じては
	  あっさり数千のファイル記述子が必要になります。</para>

	<para><varname>kern.maxfile</varname> のデフォルト値は
	  kernel config ファイルの maxusers オプションで決ります。
	  <varname>kern.maxfiles</varname> は maxusers の値に応じて増加します。
	</para>
      </sect3>
    </sect2>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->
