doc/ja_JP.eucJP/books/handbook/config/chapter.sgml
Ryusuke SUZUKI de9219c70c - Merge the following from the English version:
1.229 -> 1.236	doc/ja_JP.eucJP/books/handbook/cutting-edge/chapter.sgml

- Related change:

	doc/ja_JP.eucJP/books/handbook/config/chapter.sgml
	doc/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml
	doc/ja_JP.eucJP/books/handbook/ports/chapter.sgml
	doc/ja_JP.eucJP/books/handbook/preface/preface.sgml

References :	[doc-jp-work 2234, 2236, 2239]
2012-02-26 13:15:48 +00:00

997 lines
39 KiB
Text

<!--
The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project
Original revision: 1.32
Waiting for: 1.55 ("soft-updates" referenced from disks).
Waiting for: 1.80 ("config-network-setup" referenced from advanced-networking).
$FreeBSD$
-->
<chapter id="config-tuning">
<chapterinfo>
<authorgroup>
<author>
<firstname>Chern</firstname>
<surname>Lee</surname>
<contrib>寄稿: </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Mike</firstname>
<surname>Smith</surname>
<contrib>基にしたチュートリアルの執筆: </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Matt</firstname>
<surname>Dillon</surname>
<contrib>基にした tuning(7) の執筆: </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>設定とチューニング</title>
<sect1>
<title>この章では</title>
<indexterm><primary>システムの設定と最適化</primary></indexterm>
<para>システムを正しく設定することは、
メンテナンスや将来の更新の際の作業の量を減らします。
この章では FreeBSD システムの管理上の設定の側面について記述します。</para>
<para>またこの章では FreeBSD システムのパフォーマンスを最適化する
チューニングについても記述します。</para>
<para>この章を読むと、以下のことがわかります。</para>
<itemizedlist>
<listitem>
<para>ハードディスク上で、ファイルシステムおよびスワップのパー
ティションの大きさと配置を決定する理由と方法</para>
</listitem>
<listitem>
<para><filename>rc.conf</filename> の設定と
<filename>/usr/local/etc/rc.d</filename>
スタートアップシステムの基礎</para>
</listitem>
<listitem>
<para>ネットワークデバイスに対する、仮想ホストの設定方法</para>
</listitem>
<listitem>
<para><filename>/etc</filename> ディレクトリ内のさまざまな設定ファ
イルの使い方</para>
</listitem>
<listitem>
<para><command>sysctl</command> 変数を使った
FreeBSD のチューニング方法</para>
</listitem>
<listitem>
<para>ディスク性能のチューニング方法と、カーネルの制限の変更方法</para>
</listitem>
</itemizedlist>
<para>この章を読む前に、以下のことをやっておくとよいでしょう。</para>
<itemizedlist>
<listitem>
<para>Unix と FreeBSD の基本を理解する (<xref
linkend="basics">)。</para>
</listitem>
<listitem>
<para>FreeBSD のソースコードを最新に保つこと
(<xref linkend="updating-upgrading">) と、
カーネルコンフィグレーションおよび構築の基礎
(<xref linkend="kernelconfig">) に親しんでおく。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="configtuning-initial">
<title>初期設定</title>
<sect2>
<title>パーティションのレイアウト</title>
<indexterm><primary>パーティションレイアウト</primary></indexterm>
<indexterm>
<primary><filename>/etc</filename></primary>
</indexterm>
<indexterm>
<primary><filename>/var</filename></primary>
</indexterm>
<indexterm>
<primary><filename>/usr</filename></primary>
</indexterm>
<sect3>
<title>基本パーティション</title>
<para>ファイルシステムのレイアウトを &man.disklabel.8; や
&man.sysinstall.8; で行う際、ハードディスクの外周部は
内周部よりもデータ転送が速いということを覚えておくことが大事です。
これに従えば、
ルートやスワップのような小さくて激しくアクセスされるファイルシステムを外周付近に、
<filename>/usr</filename> のようなより大きなパーティションは
その内側に配置すべきでしょう。
そのため、パーティションを作成する際には、ルート、スワップ、
<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 をまったく使わずシステムのソース (<filename>/usr/src</filename>)
も不要だというのであれば、1 ギガバイトの <filename>/usr</filename>
パーティションだけで充分です。 しかし、ports
(特にウィンドウマネージャや Linux バイナリ)
を少なからずインストールするのであれば
少なくとも <filename>/usr</filename> に 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>
のデフォルトの設定を <filename>rc.conf</filename> ファイルにエン
トリを作ることで上書きすべきです。
デフォルトのファイルをそのまま <filename>/etc</filename>
にコピーするのはやめるべきです。
それはデフォルト値であってサンプルではないのです。
システム固有のすべての変更は <filename>rc.conf</filename> ファイ
ルの中でするべきです。</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.example.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; や <command>make world</command> 等で
更新した場合 <filename>rc.conf</filename> ファイルは上書きされません。
なのでシステムの設定情報が失われることもありません。</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 やパッケージがインストールされると
設定ファイルのサンプルが一緒にインストールされます。
大抵、識別のためにサフィックスとして
<quote>.default</quote> がついています。
アプリケーションのための設定ファイルがまだ存在していなければ、
.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>ファイルサイズの差から、<filename>srm.conf</filename>
ファイルだけが変更されていることが分かります。
後に 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> にスクリプトを置き、
システムが起動した時には <option>start</option>、システムをシャッ
トダウンする時には <option>stop</option> を引数にして実行します。
これは <username>root</username> で実行すべき、または
<username>root</username> で起動することを期待されているシステム
ワイドなサービスを起動する場合に推奨される方法です。
これらのスクリプトはパッケージの一部としてインストール時に記録され、
パッケージとともに削除されます。</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; を利用することもできます。
このアプローチには、&man.cron.8; がそのプロセスを
<command>crontab</command> の所有者権限で実行したり、サービスが
非特権ユーザによって立ち上げられ管理されるなどといった有利な点が
いくつもあります。</para>
<para>これで &man.cron.8; の機能の利点を得ることができます。
日時の指定を <literal>@reboot</literal> で置き換えることでジョブは
システムがブートした直後、&man.cron.8; が起動した時に実行されます。</para>
</sect1>
<sect1 id="configtuning-virtual-hosts">
<title>バーチャルホスト</title>
<indexterm><primary>バーチャルホスト</primary></indexterm>
<indexterm><primary>ip aliases</primary></indexterm>
<para>FreeBSD の非常にありふれた用途の一つにバーチャルサイトの
ホスティングがあります。
これは一つのサーバがネットワークには複数のサーバとして現れるものです。
これは一つのネットワークインタフェイスに
複数のアドレスを割当てることで実現されます。</para>
<para>ネットワークインタフェイスは <quote>真の</quote> アドレスを
一つと <quote>別名</quote> のアドレスを複数持ちます。これらの別
名は通常 <filename>/etc/rc.conf</filename>
に別名のエントリを置くことで追加されます。</para>
<para><devicename>fxp0</devicename> インタフェイスへの別名のエント
リは以下の様なものです。</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>例として、<devicename>fxp0</devicename> インタフェイスが二つ
のネットワークに接続されているものを考えてみましょう。
一つはネットマスクが 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>追加的な &man.sendmail.8; の設定、他の MTA の設定ファイル。
</entry>
</row>
<row>
<entry><filename>/etc/ppp</filename></entry>
<entry>ユーザモード、およびカーネルモードの ppp プログラムの設定。
</entry>
</row>
<row>
<entry><filename>/etc/namedb</filename></entry>
<entry>&man.named.8; のデータのデフォルトの置場。通常
boot ファイルはここに置かれ、
<filename>/var/db</filename> に置かれた他のデータを
参照するディレクティブを含みます。</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>永続的なシステム固有のデータファイル。 たとえば
&man.named.8; のゾーンファイル、データベースファイル等。</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2>
<title>ホスト名</title>
<indexterm><primary>hostname</primary></indexterm>
<indexterm><primary>DNS</primary></indexterm>
<sect3>
<title><filename>/etc/resolv.conf</filename></title>
<indexterm>
<primary><filename>resolv.conf</filename></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 example.com
nameserver 147.11.1.11
nameserver 147.11.100.30</programlisting>
<note><para><literal>search</literal> オプションと
<literal>domain</literal> オプションは、
どちらか一方しか使ってはいけません。</para></note>
<para>DHCP を利用している場合、&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&dollar;
#
# 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.example.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; プログラムのための設定ファイルです。
これはどのタイプの <command>syslog</command> メッセージを対応する
ログファイルに記録するかを指定します。</para>
<programlisting># &dollar;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) manual page.
*.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 log host 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.cron.8; によって予定を決めて実行されるプログラム
&man.newsyslog.8; のための設定ファイルです。
&man.newsyslog.8; は、
ログファイルをいつ保存して再編するかを決定します。
<filename>logfile</filename> は <filename>logfile.0</filename>
に移され、<filename>logfile.0</filename> は
<filename>logfile.1</filename> に、そして以下同様に移されます。
また、ログファイルを &man.gzip.1; 形式で保存することもできます。
この場合ファイル名は <filename>logfile.0.gz</filename>,
<filename>logfile.1.gz</filename> の様になります。</para>
<para><filename>newsyslog.conf</filename>
はどのログファイルが管理され、どのくらいの期間保存され、
そしていつ touch されるかを指定します。
ログファイルはあるサイズに到達するか、ある決められた時刻・
日時で再編されあるいは保存されます。</para>
<programlisting># configuration file for newsyslog
# &dollar;FreeBSD&dollar;
#
# filename [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> によく似ています。
値は<literal>変数=値</literal>のかたちでセットされます。
指定された値はシステムがマルチユーザモードに移行した後でセットされます。
すべての変数がこのモードで設定可能というわけではありません。</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>個々の変数、たとえば
<varname>kern.maxproc</varname> を読むには以下のようにします。</para>
<screen>&prompt.user; <userinput>sysctl kern.maxproc</userinput>
kern.maxproc: 1044</screen>
<para>特定の変数をセットするには、直感的な文法
<replaceable>変数</replaceable>=<replaceable>値</replaceable>
を使ってください。</para>
<screen>&prompt.root; <userinput>sysctl kern.maxfiles=5000</userinput>
kern.maxfiles: 2088 -> 5000</screen>
<para>sysctl 変数の値は通常、文字列、数値、真偽値のいずれかです。
(真偽値は yes の場合には <literal>1</literal> で no の場合には
<literal>0</literal> です)。</para>
</sect1>
<sect1 id="configtuning-disk">
<title>ディスクのチューニング</title>
<sect2>
<title>sysctl 変数</title>
<sect3>
<title><varname>vfs.vmiodirenable</varname></title>
<indexterm>
<primary><varname>vfs.vmiodirenable</varname></primary>
</indexterm>
<para><varname>vfs.vmiodirenable</varname> sysctl
変数のデフォルトは 1 (オン) で、
0 (オフ) または 1 (オン) にセットすることができます。
このパラメータはディレクトリがシステムによってどのように
キャッシュされるかを制御します。
ほとんどのディレクトリは小さく、
ファイルシステムにおいては単一フラグメント (典型的には 1K)
であり、バッファキャッシュではさらに小さくなっています
(典型的には 512 バイト)。
しかしデフォルトモードで動作している時は、
大量のメモリを搭載していても
バッファキャッシュは固定数のディレクトリしかキャッシュしません。
この sysctl をオンにすると、バッファキャッシュが VM ページキャッシュを、
ディレクトリをキャッシュするために使うことを可能にします。
これによる利点は、全てのメモリがディレクトリを
キャッシュするのに使えるようになるということです。
欠点は、キャッシュに使われる最小のメモリの大きさが 512 バイトではなく
物理ページサイズ (大抵は 4K) になることです。
多数のファイルを操作するサービスを稼動しているなら、
常にこのオプションをオンにすることを推奨します。
そのようなサービスには、web キャッシュや大規模なメールシステム、
ニューズシステムなどが含まれます。
このオプションは一般にメモリを消費しますが、
性能を削減することはありません。
ただし実験して調べてみるべきでしょう。</para>
</sect3>
<sect3>
<title><varname>hw.ata.wc</varname></title>
<indexterm>
<primary><varname>hw.ata.wc</varname></primary>
</indexterm>
<para>FreeBSD 4.3 では IDE のライトキャッシュがオフになりました。
これは IDE
ディスクへの書き込み帯域幅を減らしてしまうことになりますが、
ハードドライブベンダに起因するデータの一貫性に関する
重大な問題のために必要なことだと考えられました。
基本的には、書き込み完了時期について IDE
ドライブが嘘をつくという問題です。
IDE ライトキャッシュがオンであると
IDE ハードドライブはデータを順番に書きこまないばかりか、
ディスクの負荷が高い時にはいくつかのブロックの書き込みを
無期限に延期してしまいます。 クラッシュや電源故障の場合、
ファイルシステムの重大な破壊をもたらします。
したがって私たちはデフォルトを安全側に変更しました。
残念ながらこれは大変な性能の低下をもたらし、
私たちはあきらめてこのリリース後にオンに戻しました。
<varname>hw.ata.wc</varname> 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; プログラムはファイルシステムを細かくチュー
ニングするのに使えます。このプログラムにはさまざまなオプションがありま
すが、ここではソフトアップデートをオンオフすることだけを考えま
す。以下の様にして切り替えます。</para>
<screen>&prompt.root; tunefs -n enable /filesystem
&prompt.root; tunefs -n disable /filesystem</screen>
<para>ファイルシステムはマウントされているあいだは &man.tunefs.8;
で変更することができません。 ソフトアップデートを有効にする
いい機会はシングルユーザモードでどのパーティションもマウント
されていない時です。</para>
<note><para>FreeBSD 4.5 からは、ファイルシステム生成時に
&man.newfs.8; の <literal>-U</literal> オプションを使って
ソフトアップデートを有効化できるようになりました。</para></note>
<para>ソフトアップデートはメタデータの性能、
主にファイルの作成と削除の性能を劇的に改善します。
すべてのファイルシステムでソフトアップデートを有効にすることを推奨します。
ソフトアップデートに関して、2 つの欠点を意識すべきです。
1 つめは、ソフトアップデートはクラッシュ時におけるファイルシス
テムの一貫性は保証しますが、
物理ディスクの更新が何秒か (1 分に達することもあります!)
遅れる可能性が高いことです。
システムがクラッシュした場合、より多くの作業結果が消えてしまうかもしれません。
2 つめは、ソフトアップデート
はファイルシステムブロックを解放するのを遅らせるということです。
あるファイルシステム (たとえばルートファイルシステム) が満杯近くの時に
それに対する大規模な更新、たとえば <command>make installworld</command>
をすると、空き領域を使い果たして更新が失敗してしまうことがあります。
</para>
</sect2>
</sect1>
<sect1 id="configtuning-kernel-limits">
<title>Kernel 制限のチューニング</title>
<indexterm><primary>kernel 制限のチューニング</primary></indexterm>
<sect2>
<title>File/Process 制限</title>
<sect3>
<title><varname>kern.maxfiles</varname></title>
<indexterm>
<primary><varname>kern.maxfiles</varname></primary>
</indexterm>
<para><varname>kern.maxfiles</varname> はあなたのシステムの要求に
応じて増減させることができます。
この変数はあなたのシステムのファイル記述子の最大値を示します。
ファイル記述子テーブルが溢れるような時には、システムメッセー
ジバッファに頻繁に <literal>file: table is full</literal>
と表示されます。これは、
<command>dmesg</command> コマンドで確認できます。</para>
<para>ファイル、ソケット、パイプ (fifo) は
それぞれオープンされるとファイル記述子を一つ消費します。
大規模なプロダクションサーバでは
その時実行されているサービスの種類や数に応じては
あっさり数千のファイル記述子が必要になります。</para>
<para><varname>kern.maxfile</varname> のデフォルト値はカーネル
コンフィグレーションファイルの <option>MAXUSERS</option> オ
プションで決まります。<varname>kern.maxfiles</varname> は
<option>MAXUSERS</option> の値に比例して増加します。
カスタムカーネルをコンパイルする際は、このカーネルコンフィグ
レーションオプションをシステムの利用法に合わせて設定するとよ
いでしょう。カーネルは、この数値からほとんどの制限の初期値を
決定します。業務用マシンに、実際に 256 名のユーザが一度に接
続することはないかもしれませんが、大規模なウェブサーバに必要
なリソースは同程度になります。</para>
<note><para>FreeBSD 4.5 からは、
カーネルコンフィグレーションファイルで
<option>MAXUSERS</option> を <literal>0</literal>
に設定すると、システムの RAM
容量に基づいて適切なデフォルト値が選択されます。</para></note>
</sect3>
</sect2>
<sect2>
<title>ネットワークの制限</title>
<para>カーネルコンフィグレーションオプション
<option>NMBCLUSTERS</option> は、そのシステムで利用可能なネッ
トワーク mbuf の量を決定します。通信量の多いサーバで MBUF の量
が少ないと、FreeBSD の性能が低下してしまいます。クラスタ一つは
およそ 2kB のメモリに対応しているので、1024 だとカーネルメモリ
から約 2 MB をネットワークバッファに予約することになります。ど
れだけ必要になるかを、簡単な計算で出すことができます。同時に最
大 1000 接続までゆくウェブサーバがあり、それぞれの接続によって
受信バッファ 16kB と送信バッファ 16kB が消費されるなら、ウェ
ブサーバをまかなうのに 32MB 程度のネットワークバッファが必要
になります。経験的に有用な値は、それを 2 倍したものなので、
32MBx2 = 64MB/2K = 32768 になります。</para>
</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:
-->