先日家にあるパソコン上の Firefox を 3.5.3 にアップデートしたおかげで、Web散策時のストレスは随分と減った。
ところが、改善されないものもあった。
突然停止したかのような、Webページ表示の遅延が散発する。
何か、日を追うごとにひどくなっているような気もした。
これは本腰を入れて対処しなくちゃならん、ということで、調査を開始した。
デスクトップ用パソコンで、時々異常に CPU使用率が上昇し、その時に Firefox の表示が遅いということは分かったのだが、なかなかそこから先に進まない。
あれやこれやしているうち、この表示遅延現象は、パソコンを起動して初めてブラウザを使ったときに頻発していて、使い続けているとあまり起こらないことに気づいた。
さては DNS(ドメインネームサーバ)がらみか。
我が家のローカルネットでは、ドメインネーム解決の効率を上げるためと、ローカルネット上のパソコンのドメインネーム管理の為に、FreeBSD-7.2Rの自宅サーバ上で DNS (=BIND-9)を動かしている。
MRTG で DNS のアクセス統計グラフを出しているので、それをみると、じわじわと索引エラー件数が上昇している。
ひどい時間帯には、アクセス件数の半分がエラーだ。
なんだこりゃ。
それで、Webページ表示遅延が起こっているときに、dig を使って、そのドメインネームの状況を見てみた。
すると、dig の応答すら遅い、というか、「Not Found」って、おいおい、なんだそれ (^^;
何回かやっていると dig でドメインネームを引けて、それとほぼ同時に Webページも表示される。
この事象が起きたドメインネームに共通していたのは、TTL値が、例えば 900秒(=15分)などと、かなり短いこと。
TTL値が小さければ、サーバトラブル等でゾーンデータ(ドメインネームとIPアドレスの対応を表わすデータ)を変更したい状況になった時に、ドメインとIPアドレスの組み合わせの変更がそれなりに早く反映するのだが、その分、頻繁にネームサーバに索引しに行くので、せっかく設置したキャッシングドメインネームサーバの効果が落ちる。
1週間とはいわんから、せめて半日とか、1時間以上に設定してくれんものかねぇ。
しかし、ネームサーバの索引頻度が上がったからといって、それが度々エラーになるのは解せない。
他に原因が隠れているのは間違いない。
試しに「BIND9 遅延」で検索してみたら、IPv6 設定がらみでエラーが発生するらしい。
※「BIND9のIPV6絡みで発生するエラーと遅延の解決方法」
なるほど、BIND-9の不具合(エラーを無視してIPv6の応答を待ってしまう)によるものなのね。
IPv4のみ有効な環境では、BIND-9自体のIPv6機能を無効にしておかないと遅延が発生するのだそうだ。
一般的な対処方法としては、BIND-9をビルドする際に、コンフィグオプションでIPv6無効を指定すればいいのだが、FreeBSD の場合はBIND-9がOSに組み込まれているので、お手軽に再ビルドというわけにもいかない。
実はFreeBSD組み込みのBINDでは、簡単に対処できる。
起動オプション「-4」を指定したスクリプトでnamedを起動すればいいのである。
※「FreeBSD 日本語マニュアル named(8)」FreeBSD-7.2-RELEASEオリジナルの起動スクリプト(/etc/rc.d/named)だったら、次の差分ファイルのように修正するだけである。
--- ./named.orign 2009-05-01 15:56:44.000000000 +0900
+++ ./named 2009-10-26 21:11:23.000000000 +0900
@@ -168,6 +168,6 @@
#
required_dirs="$named_chrootdir" # if it is set, it must exist
pidfile="${named_pidfile:-/var/run/named/pid}"
-command_args="-u ${named_uid:=root}"
+command_args="-4 -u ${named_uid:=root}"
run_rc_command "$1"
スクリプトを修正して、named(=BIND-9)を再起動すると、うまくいった。ネームサーバの索引遅延は起こらなくなった。(^^)
【教訓】IPv6が使えない環境では、「IPv6機能無効」でアプリケーションを構築しよう。
ちなみに、ports で、portupgrade 関連コマンドを使って導入するアプリケーションを、一律「IPv6機能無効」にするには、 /usr/local/etc/pkgtools.conf に次のような記述(太字部分)をするとよい。
MAKE_ARGS = {
'databases/mysql50-client' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql50-server' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'editors/openoffice.org-2' => 'LOCALIZED_LANG=alllangs',
'*' => 'WITHOUT_IPV6=yes',
}
(11月3日追記)Sendmail のIPv6機能も無効にしないと、「no ipv6 socket」といった類の警告(どちらかというとエラー)メッセージが出ます。
修正するのは /etc/mail/sendmail.cf ファイルです。
FreeBSDでは、一般的に ~.mc ファイルを修正して、「# make install」として、m4によるsendmail.cfファイル作成を行います。
※もちろん、Linuxと同様に、m4を直接起動してもOKです。@@ -83,7 +83,7 @@ dnl Enable for both IPv4 and IPv6 (optional) DAEMON_OPTIONS(`Name=IPv4, Family=inet') -DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O') +dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')







コメントする