「 自宅サーバが安定しない。」と、ずっと書き続けてきたのだけど、昨日 csup したら 7.1-STABLE が 7.2-PRERELEASE になっていたので、サーバが凍り付く前にリブートしてバージョンアップでけた。
と、言うことで最近のサーバは uptime 12days を記録し、去年の 10 月以来最高の記録となりました;-)。
ちなみに さくらインターネット が自社のサーバを 7.1-RELEASE にアップグレードするってアナウンス出したので思わずサポートに「7.1-RELEASE はフリーズしてしまうけど、サービスにおいて大丈夫ですか?安定してくれないとイヤだなぁ。」と書いたら「検証の結果、凍りつくハードウェアも確かにあったけど、サービスに利用しているハードウェアは大丈夫なのでバージョンアップします。」との事でした。でもって回避策も考えているそうな。
で、うちのサーバがどうして安定したか。と言えば OS の改修とか色々考えられるのですが、現在のうちのサーバの稼働状況を見てみると以下のような感じです。
・DNS サーバ
・ウェブサーバ(httpd-2.2.9) port:80 最大プロセスが 140 個程度
・ウェブサーバ(httpd-2.2.9) port:8080 最大プロセスが 20 個程度
・メールサーバ(sendmail)
・POP3/IMAP4 サーバ(courier-imap-4.4.1)
・自宅網内用 SAMBA サーバ
・cvsupd
・IPv6 ルータ(dtcps,dtcpc)
こんな感じでしょうか。サーバ部分とルータ部分が存在しているのですが、PPPoE はブロードバンドルータにやらせています。
さて、安定させるために行ったことは大体以下です。
・IPv6 ルータを別のマシンで行うようにする
・ダメもとでスケジューラを SCHED_ULE から SCHED_4BSD に変更
・httpd を prefork から worker に変更
こんな感じでしょうか。ただ、これらの事象がサーバの安定に貢献できたのか、さだかではありません。
httpd をプロセス起動からスレッド起動に変更したおかげで ps -ax で見た感じはかなり少なくなりました。 ps -axH | wc -l すると大体 300 近い数が存在しているので、この状態を高負荷状態と行って良いのかもイマイチ不明です。
ただ、ロードアベレージはそんなに高くは無いし、CPU クロックもいつも最高速で回っている。と言うのでもありません。この辺りの情報は MRTG で取得しています。なのでやはり、プロセスやスレッド回りで OS 的に何かあったのかなぁ?と考えてしまうのでありました。
httpd を prefork から worker に変更したのが一番大きいのかなぁ?あ、きっと OS 側に修正が入ったのでしょうねぇ。csup するたんびに kern_ とかのソースが更新されていると嬉しくなっていましたし。< 僕;-)。
最近 csup した 7.1-STABLE は powerd の挙動が変わったねぇ。僕は CPU のロードアベレージと速度を MRTG で取得していて毎日見ているのだけど、それで powerd の挙動が一目瞭然;-)。
今までとどう変わったか?と、言われれば、多分 C7i や PhenomII など Core 毎に速度が変えられるようになったのに対応したのでしょうなぁ。
MRTG のグラフを見ていたら、今までは
CPU クロック抑えつつロードアベレージがちょっと高め
だったのだけど、最近の STABLE では
CPU クロック高めでロードアベレージはちょっと抑え気味
って感じかな。まぁ、どっちでも構わないのだけど、CPU クロックを低くしていれば消費電力が抑えられるわけでして。地球環境を考えたら、僕的には今までのほうが良いなぁ。と思ってしまうわけです。サーバであっても CPU ロードアベレージが低ければクロックも低くなっていて欲しい。裏を返すと、多少ロードアベレージが高くても CPU クロックは低くても良い。みたいな感じかしら。
で、powerd で調整できないものか man みましたよー。で、オプションで CPU クロックの変動を抑制することができる;-)。
現在、AthlonX2 なサーバに設定している powerd のオプションはこんな感じ。
|
Atom N330 なサーバに設定しているオプションはこんな感じ。
|
まず、-a で adaptive を指定して「適切なモード」を設定します。 -i で CPU アイドルのパーセントレベルを指定して、最後に -p でポーリング時間を設定します。
経験上、ポーリング時間を変更すると細かな CPU クロックの調整ができます。大きく変えたい時は -i オプションの値を変更すれば良いかと思われます。
後は二時間位ブン回して、その間に MRTG で情報取得して更にオブションの値を細かく調整すれば良いかと思います。
それにしても、温度とか、この手の値って MRTG で取れると知ると知りたくなるんだけど、知らなくても全然問題無いのよねぇ。その気分的な問題が中々面白いんだけど;-)。
それにしても、CentOS で CPU 速度を落とそうとしても、ややこしいのねぇ。カーネルモジュールをロードしてもエラー吐いてダメだしさ。そー考えると CPU クロックを可変にするのは FreeBSD のほうが圧倒的に楽だね。GENERIC カーネルだと powerd を起動すれば良いだけだし。
そー考えると地球環境を考える人は FreeBSD 使うのかぁ?;-P。
以前にも書いたかもしれないけど、僕はメールの読み書きに mew を使っている。けど、迷惑メールフィルタが貧弱なので、Thunderbird を起動して imap 上で、まず「迷惑メールフィルター」を実行した後で mew で POP してメールを保存したり、メールに対して返事を返したり、新規にメールを書いている。
Thunderbird の迷惑メールは僕個人的にはすごーく重宝しているのだけど、そもそも Thunderbird を起動するためには X が必要になる・・。
Thunderbird の「迷惑メールフィルタ」と「フォルダ振り分け」の部分のみを切り出してデーモンとして起動できないかなぁ・・。以下、仕様の独り言。実装してくれる人大募集;-)。
1. デスクトップで利用する Thunderbird で「迷惑メールフィルタ」を大いに育てる。
2. 「迷惑メールフィルタをエクスポート」でテキストベースのファイル「迷惑メールフィルタ.conf」に保存。
3. 迷惑メールフィルタデーモンは「迷惑メールフィルタ.conf」をルールファイルとしてメールサーバ(pop3/imap4 が動作しているサーバ)上で起動。
4. 迷惑メールフィルタデーモンは設定ファイル記載された pop3/imap4 を判断して迷惑メールを「迷惑メールフィルタ.conf」に従い特定のフォルダに振り分ける。
5. 迷惑メールの振り分けは設定ファイルに設定した時間間隔で定期的に振り分ける。
迷惑メールの振り分けのもとになる「迷惑メールフィルタ」は普段自分が利用している Thunderbird のものを使えば良いのでデーモン自体が育てる必要は無いので楽で良いと思うのだけどなぁ。もしくはコマンドラインで /usr/local/bin/hunderbird –spamfilter > spamfilter.conf みたいにできれば、それを定期的に迷惑メールフィルタデーモンに HUP シグナルで食わせれば良いのでラクチンなのになぁ。
Mozila-Japan とか もじら組 で 実装してくれないかなぁ。
もしくはこの記事読んだ方、実装してくださーい;-)。
以上、独り言でした。
前回「KDE-4.2良いよぉ。」と、ちろっと書いたのだけど、その上で konqueror を使っていたら「あれ?Safari と表示が一緒だぞぉ。」などと思えてきたので、今回キャプチャしたものを比較してみたいと思います。ちなみに Safari は konqueror のレンダリングエンジンである KHTML から派生した WebKit がベースで qt4+KDE4 には qt4-webkit なんて言う ports もあったりするので konqueror への期待は大いに高まったりするのです;-)。
今回のブラウザのキャプチャは以下の通り。Windows では日本語のアンチエイリアスが有効にならないので、Windows 自体は全く使う気にならない。WindowsXP 上の Firefox3 でメイリオフォントを指定した場合、どうしてあんな汚い表示なんだぁ?と驚いてしまう。 Windows ユーザは素早く IE も Firefox も捨てて Safari を使ったほうが良いのでは。と、僕個人的は思う;-P。(僕は WindowsVistaは常用していない;-)
・FreeBSD/amd64 7.1-STABLE+kde-4.2.0 の konqueror
・MacOSX Leopard 上の Firefox3.0.6
・MacOSX Leopard 上の Safari3.2.2
Firefox3 は WindowsXP と FreeBSD、そして MacOSX 上で動作しているけど、 MacOSX 上のヤツが一番きれいに表示できるのでそこからのエントリです。全てのキャプチャ画像はクリックすると大きくなります。
まずは kde-4.2.0 の konqueror から。
続いて Firefox3。
最後に Safari3。
全てのブラウザでアンチエイリアスが効いていてフォントがきれいに表示されています。まぁ、多少、フォントの誤差はありますが、その点についてはお許しください。
今回はこのサイトをキャプチャしましたが、konqueror と Safari はタイトルとブログのタイトル文字にうっすらと影があるのが見えるでしょうか?それに引き替え、Firefox3 にはその影が表示されていません。
このブログのテンプレートはもともと Mac ユーザの方が作ってくれたのを利用しているので、MacOSX に最適化され、きれいに表示してくれるようになっています。
なので、最近の僕は(写真の編集などもあるけど)ほとんどのブログの書き込みと確認は MacOSX 上で行っていたのでありました。けど、KDE-4.2 の konqueror が Safari に非常に近いデザインでコンテンツを表示してくれていると言うのに感動しました;-)。さすがは KHTML と言うか WebKit だなぁ。と。
けど、KDE-3.5 の konqueror は見るも無残な状態であったために Firefox3 をずっと使っていたのだけど、KDE-4.2 になったらその出来と言うか、コンテンツ表示のすばらしさにちょっと関心してしまいました。
後、FreeBSD 上では Firefox3 で利用する nspluginwrapper 経由の各種プラグインを konqueror が「mozilla プラグイン」として認識するので linux-flashplugin-9 も動作します。これはこれで大変嬉しいことです。
KDE-4.1.2 は plasma がしょっちゅうぶっこけて全ての KDE アプリを道連れにしていたのだけど、KDE-4.2.0 になって、まぁ、時々 plasma は落ちるけど、自己修復型で再起動してくれるので随分と楽になりました。
やっぱえぇなぁ。qt4+KDE4 は。
ただ、人に言わせると c++ はいらん。だそうです。確かに ports をコンパイルすると膨大な時間が掛かることは確かではありますが・・(^^;;。
皆さんも是非使ってみてください。ちなみに僕は JKUG のスタッフです。布教活動には余念が無いであります;-)。
あ、最後にですが、MacOSX 用の KDE4 は未だ 4.1.2 のままです。早く 4.2.0 がでないかなぁ;-)。MacOSX 上で konqueror を起動してみたいものです;-)。
FreeBSD で net-snmp のデーモンを起動して、別のマシンから MRTG でデータを取得してグラフを表示させる。なんてのは google で検索するとゴマンと出てくるので、ここではもっと局所的な情報を書いてみたいと思います。
まず、net-snmpd ですが、起動時に以下のオプションを付加すると IPv6 対応になります。 以下は rc.conf.local への書き方です。udp6:161 と udp:161 で待っているよ。ってオプションを追加します。
|
これで snmpd のほうは IPv6 対応になるので、まぁそこそこ簡単です。起動した時のプロセスを見るとこんな感じです。
|
さてと。問題は MRTG のほうですが、こっちはたくさん色々あります。まず、 ports から /usr/ports/net-mgmt/mrtg をインストールするのですが IPv6 enable にしてインストールします。その時、perl モジュールとして p5-Socket6 と p5-IO-Socket-INET6 がインストールされたことを確認します。
けど、FreeBSD の ports からインストールした場合、これだけではまともに mrtg が動作しません。p5-SNMP_Session(この中の SNMP_util.pm を mrtg が利用します) も併せてインストールしてあげる必要があります。この p5-SNMP_Session は mrtg の関連性でインストールされないので明らかに mrtg の ports の問題だと思われます。 send-pr ネタです;-)。
後、mrtg の ports にはもう一個問題と言うか気になる点が有って Cisco などのルータやスイッチの 10G インターフェースをグラフに表示しようとすると桁あふれしてまともなグラフになりません。10Gbps なインターフェースは 32bit int では足りなくて 64bit int が必要と言うことですね。そんな時は p5-Math-BigInt と p5-Math-BigInt-GMP を併せてインストールしてあげます。これも mrtg の port において関連性を是非付けてもらいたいものです。
# 10G インターフェースあるルータの MRTG なんざとらねぇよ。って声が聞こえてきそうですが・・;-)。
さてと。これでようやっとインストールが完了しました。これで mrtg を起動しますが、その前に mrtg.cfg を用意して上げます。今回は cfgmaker で作成してもしなくとも良いです。mrtg.cfg はこんな感じになりました。IPv6 アドレスでアクセスしたいぜぃ。って感じです。
|
それにしてもすごーく大きな問題点が・・。インターフェース情報の設定において Target には ifIndex しか書けない状態となっております。ifDescr などを書くとエラーとなってしまうのです。orz。上記の場合、re0 は固定な NIC なので良いけど、gif とか gre なインターフェースみたいに動的に生えたり消えたりするインターフェースの場合、どうすんのさぁ・・。ちなみに /IP でも設定してみたけど、やはりダメ・・。困ったなぁ・・。
MRTG 2.16.2 configuration reference
この辺りを見ても全然ダメなので MRTG_lib.pm に直接手を加えるしか無いかも・・。そもそも、 “&”, “:”, “@” とか ” ” を “\” で修飾しなさい。ってんだけど、IPv6 アドレスに “:” があるのでマトモに動作しないんだろうなぁ。と勝手に思っているのですが・・。
あぁ。ちなみに nopublic@ の後に IPv6 アドレスでなく FQDN を書いた場合は無事に動作します。ただ、MRTG の仕様として IPv6->Ipv4 へのフェイルオーバーはしない。と言っているのでその点をどう考えるかですね。
後、ルータやスイッチなどのネットワーク機器は基本的に DNS へは登録しないので FQDN だと OK よ。って言われてもいまいち説得力ないですよねぇ・・。
今の段階の MRTG ではこれが限界なのかな。新しいバージョンに大いに期待することにしましょう。
この後、話は rrdtool にまで及ぶのでしょうか? 既に “:” がある IPv6 アドレスを DEF: とかに記述した段階で動いていないのですが、まだそこまで手は回っていません;-)
この記事のつづきを書きました。
ずばりっ。これを購入 。どうしてこれにしたかと言えば、安いのが一番。二番目が PCI スロットがあったから。でもってデアルコア;-)。
余った PC パーツは自宅のサーバが安定しないので交換のために買ったのがごろごろしているのでそれを流用することができるのです。 けど、必要なのはメモリと HDD だけなんだけど・・。
で、HDD は Hitachi HDP725032GLA360 GM3OA52A 320GB のやつ。これは、自宅サーバの Seagate ST3500320AS SD15 500GB をリプレスするために用意しておいた。そー。シーゲートの不良品対策のためにね。でもって HDD の中には既に FreeBSD/amd64 7.1-RELEASE がインストールされているのだけど、これをそのまま付けてブート。
あぁれぇーー。全然問題無くブートしてしまったじゃないのさ・・。と、言うことは AtomN330 は amd64 に対応していると言うことだね。でもって DualCore なんだけど HTT なので FreeBSD からは Core が 四つに見えてしまう。うーん。贅沢だぁ;-)。
ちなみに Windows は全く起動していないので知りません。FreeBSD の HDD は Athlon64 X2 でインストールしたヤツがそのまま動作しました。って感じです。
その後 7.1-STABLE にアップしました。dmesg はこんな感じ。
USB 接続のカードリーダを積んでいるのだけど、これらはメティアを入れてなくともデバイス自体を FreeBSD 側で認識してしまう。 BIOS で disable にしても FeeBSD 側で認識してしまう。
後、オンボード NIC が 本当は rl0 で 100Mbps なのだけど、実際には re0 として認識される。これは、オンボード NIC が PCI-e に接続されているからですねー。考えてみると PCI-e 接続な rl0 なんて聞いたことないものねぇ。
なので、Giga NIC を PCI パスの空きスロットに刺したいがためにこのベアボーンキットを購入したのでありました;-)。
後、気づいた点としては CPU の温度が取れないですねぇ。coretemp.ko ダメでした。k8temp.ko も当然ダメでした・・。mbmon もダメでした・・。ふむー。
さてと。Core が四つもあるので使用感ですが、一応、ベンチマークを取ってみました。カーネルを make cleandepend && make depend した後に make を叩くのですが、この時の時間を計測してみました。
Atom N330 : 1600MHz : make -j4
1173.13 real 2342.58 user 158.38 sys
Athlon64 X2 4000+ : 2200MHz : make -j2
584.00 real 657.92 user 50.86 sys
CPU 速度がまぁ、だいぶ違うのだけど、それでも Athlon64 X2 の make -j2 のほうが圧倒的に早いよねぇ。まぁ、当然だろうけどさぁ。後、Atom 側は S-ATA が 150。これもちょっとは影響するかな。
と、言うことで Atom な CPU ではもう少し遊ぶ予定。その後は自宅の安定しないサーバのバックアップとして利用する予定。 Atom 側からサーバに対してアクティブ監視とパッシブ監視を行い、応答が無くなったら、サーバの持っていた IP アドレスを alias して Atom のバックアップ機でサービスを継続できるようにする予定。データ自体はもう既に rsync で Atom 側に送っているので、同期もばっちりb(^^)。
んー。会社のミッションクリティカルなサーバみたいだ;-)。
後は、専ら検証機として利用するかなぁ;-)。
最近の ports では KDE4 が KDE-4.1.2 から KDE-4.2.0 になった。早速バージョンアップ。実は FreeBSD で初めて KDE4 が利用できるようになったバージョンは 4.1.0 です。KDE-4.0.0 は冒険者のバージョンとして扱われていたのでありました。
で、4.1.2 を使い始めたのだけどこれがまたヒドイしろものでして・・。plasma が落ちるともうデスクトップが利用できない状態になる。emacs を起動しておいて M-x shell から X を kill して復旧していた。 plasma がよく落ちる。と言うのも問題であったのだけど、4.2.0 になったら あんまり plasma が落ちなくなって、落ちても、すぐに再起動するようになった。ちょうど、Windows で凍りついたエクスプローラを終了させて、一瞬画面がフワっとなって再度表示しなおしてくれるような感じと全く一緒。
ja-kde4-l10n は日本語テキストですが、まだ翻訳が行き届いていないですねー。色々な所に英語メッセージが残っています。後、LANG が ja_JP.eucJP だとビミョーに正しく日本語表示できない所が多々有ります。もう LANG は UTF-8 にしろ。ってことですかねぇ。ちなみに僕は KDE-4.1.0 から UTF-8 に移行しました。
ちなみに LANG の設定がばっちりになると、フォント名も日本語でフォントしてくれるようになります。例えば、僕の環境の場合 meiryo.ttc は UTF-8 の場合はフォント名が「メイリオ」となるのですが、ja_JP.eucJP の場合は GTK アプリ(例えば firefox3)と一緒で「Meiryo」と表示されます。なので、先に LANG を決定してからフォントの設定をしたほうが良いかもしれません。
dolphin (ファイルマネージャ)ですが、これは smb:// 先のサーバの日本語にも対応してくれました。今までは日本語ファイルやディレクトリをクリックすると dolphin がクラッシュしていたのですが、今度は無事に表示して、クリックもできるようになりました。
konqueror。これはっ!! そもそも、最近は WebKit が大はやりですが、WebKit はそもそも konqueror で利用していたレンダリングエンジン。その割りには konqueror と Safari の表示に差異があるなぁ。と常々思っていたのだけど、4.2.0 に搭載している konqueror は Safari と同じ表示をしてくれるようになりました。スタイルシートの読み込みが Safari に近くなって来たのかな。とも思うけど。Safari とは ルックアンドフィールや操作性は違うけど、コンテンツの表示が Safari と一緒になった。と言うのはすごいうれしー。
ただ、今のところ UTF-8 なコンテンツしか見えないんだけど・・X-(。ってのは前に書いていたねぇ(^^;;。
とまぁ、感動した点を重点的にツラツラと書いてみました。
実は 4.1.2 では plasma があまりにも頻繁に落ちるのでイヤになって KDE-3.5 を再インストールしていたのですが、4.2.0 はそれなりに安定して来たと言う感じかなぁー;-)。
つづく。かな?
前回書いたネタ の続報です。
前回は「ようやっと動いたぜぃ。」って感じで書いたのだけど、書いて公開した直後にサーバがダウン・・。
やはり 7.1-RELEASE や 7.1-STABLE では 5 日の壁越えられないのねぇ。ってのを実感。でもっていやはやダメだわー。ってんで、結局 2008/10/31 のソースコード一式を csup で持ってきてそれでカーネルを作ってみた。
いやぁ。見事に今度は uptime が 5 日を超えました。 uname -a 的には 7.1-PRERELEASE。もーこれでいーや。状態。
最新をおっかけるより安定性重視と言うことで。
それにしてもデスクトップのほうは 7.1-STABLE を追いかけているのだけど、所々「これ、怪しいなぁ。」と言うソースコードが commit されているみたいで・・。
けど、最新を追いかけてまた安定しなくなったら困るので当分はこのままで以降と思っております。
それにしても安定して良かった。次回、サーバのバージョンを上げるとしたら 7.2-PRE 辺りかなぁ・・。当分はバージョンアップするの、やぁめた。
新しいバージョンが出たのでその日の内にアップデートしたのだけど、他にブログに書くことがたくさんあったので今のタイミングになってしまいました。
それにしも、今回からはもー JailBreak はしないことに決定。AppStore から無料のソフトをダウンロードするだけで事が足りるようになったのでねぇ・・。後、唯一欲しいのがテキストリーダかな。色々な文字コードが表示できて、改行もしてくれるヤツが良いのだけど、無料だと中々無い・・。
今回のバージョンアップで、iPod Touch ですごーく幸せになった。と言うのは特に無いのだけど、書いてみました。ってこれだけで終わりかよっ!!ってんではなんなんで・・。
iPod なので音楽聞くんだけど、僕は 400 曲位入れていて「シャップル」で聞いている。iPod を持った最初の頃はアルバム単位でシーケンシャルに聞いていたのだけど、シャッフルで聞くようになったら、「次はこんな曲かー。」って随分と新鮮だった。今は慣れたけどねぇ。
で、そのシャッフルだけど、バージョンがあがるたんびに乱数変えてないないかい?とか思うようになってきた。400 曲位入っていて一時間程度しか聞かないと「シャッフル」とはいえ、ほとんど同じ曲がかかっている気がするんだけど、バージョンアップした後は、「お?今までこんな曲かからなかったぞ。」とか思うわけです。それもバージョンアップのたびに毎回。
そー考えると、アップルは iPod の OS のバージョンアップのたんびにシャップル用の乱数をちゃんと更新してくれているのではないか。と思えてしまうのですが、実の所、どうなんでしょう。
それにしても iPod Thouch を車の中でも聞くんだけど、再生中に iPod を横にすると流れている曲のジャケットを表示してくれる。横にして聞いている状態が長いってのは今のところ、車の中でしか無いんだけどね。
で、バージョンが 1.3 の頃は一番最初に表示されたジャケット(つまり一番最初に聞いた曲ってことです)がずっと表示されたままだったのだけど、2.0 以降はちゃんと曲に併せてジャケットが iThunes みたいにパタパタパタと動いて変わってくれるようになった。これは嬉しいなぁ。とミョーに感動したものです。
そー考えると、ドックが付いている iPod 対応のスピーカーは iPod Touch や iPhone の場合は横に付けたほうが楽しい。と言うことだねぇ。と、言うことで、メーカーさん。iPod を横置きで接続できるスピーカーを出したほうが売れますよ;-)。
と、まぁ、こんな風にバージョンアップのたびにちょっとずつ変わっていってくれると嬉しいですねぇ。
それにしても最近、FreeBSD ネタ多いなぁ。今回もなんだけど・・。
/var/locg/messages に、以下のようなログが出力されませんか?
|
xorg を 7.4 にしたら突然出るようになって、X を終了(プロセスを kill するなど)すると OS 自体を道連れにマシンが凍り付く。怖いですねぇ。イヤですねぇ・・。
xorg-7.4 とカーネルの agp とか drm 回りの相性で Intel 系のグラフィックチップを使っている場合に発生します。ちなみに僕は DELL の X1 でこの現象に陥りました。X を立ち上げたが最後、もー後は X が終了できなくなります。sync を 30 回位叩いてから shutdown を実行しますが、終了プロセスにおいて X のプロセスを kill した段階で凍りつきます。
ちなみに DELL X1 は i915GM です。xorg-7.3 の時は問題なかったのですが、 7.4 にしたらこの状態・・。しかし DELL X1 では 2009/01/09 頃の FreeBSD/i386 7.1-STABLE を利用していたのだけど、 1/31 に csup したら直りました。
なので、STABLE を利用している方は最新のバージョンに up したほうが良いかもしれません。7.1-RELEASE を使っている場合にこの問題に陥るか、僕は知りません。ごめんなさい。