webサーバをチューニング

webサーバのチューニングのポイントをまとめておきます。

TIME_WAIT待機時間を短くする
アクセスが多いシステムだと、
ソケットの開放が追い付かなくなって
ポートを使いきってしまいます。
⇒特にKeep Alive OFFのwebサーバなど

RedHat系Linuxの場合、この待機時間は
net.ipv4.tcp_fin_timeout
の値になります。(単位は秒)
net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycleを有効にすることで再利用を促進します。
オンラインで変更する場合、sysctlを使って調整します。

設定値の表示
# sysctl -a
設定値の書き換え
# sysctl -w net.ipv4.tcp_fin_timeout=30
# sysctl -w net.ipv4.tcp_tw_reuse=1
# sysctl -w net.ipv4.tcp_tw_recycle=0

↑なんか勘違いしていた可能性があるので修正。現状では大きな問題は起きていないですが、tcp_tw_recycleはNATで問題が起きることがあるようなので最終手段です。
@2008/12/11追記

↑tcp_tw_recycleを1にすると問題が多くて地雷祭りなので、基本0にしておきます。
@2010/10/29追記

いまさらですけど、tcp_fin_timeoutはtime_waitの数と関係ありません(60秒でハードコードされているとのこと)。tcp_fin_timeoutが関係あるのはFIN_WAIT_2の数で、FIN_WAIT_2が多い場合はtcp_fin_timeoutを短くすると改善するかもしれません。

また、起動時に設定されるように
/etc/sysctl.conf
を編集して設定しておきましょう。

参考図書

[Read More]

auto negotiationの仕組み

旧サイトからの移設分エントリです。

最近はインターネットも一般的になってきたこともあって、その仕組みについての知識もだいぶ普及してきたようです。
パケット通信とはなんぞや、や、 HTTP, FTP, SMTP, POP等のプロトコルレベルの話からTCP/IPの仕組みぐらいまでが一般的ですかね。
OSI参照モデルなんかは大学でも情報系の学科なら必修ですね。

実践的な話ではTCPの場合のコネクションをはるまでの過程やルーティングの話がありますね。私も基本的な話はだいぶ分かっていたつもりなので すが、最近ひとつ疑問につきあたりました。

オートネゴシエーションの仕組みはどうなっているのか、です。

あのHUB< ->NIC間等で通信スピードと方式の検出を行うあれです。まさに基礎の基礎。なにしろ最初の一歩・ケーブルを挿す、の直後ですから。 というわけで調べてみました。

今回は一次情報の場所がわからなくて困りました。まずRFCを調べたけど空振り。ということでgoogleからあさってみました。で、見つけたのがここ(⇒Charles Spurgeon's Ethernet Web Site)。ここが一次情報源だと思います。

で、 肝心のauto negotiationの仕組みはというと、詳しくは分かりませんでした。(といってもただじっくり読んでないだけですが。)おおざっぱに言うと、FLP (fast link pulse)やNLP(normal link pulse)と呼ばれる既定のパルス波を用いて以下の優先順位で検出を行っているらしいです。

[Read More]

[OpenXチューニング]MySQL物理データファイルのサイズ

OpenXでのMySQLチューニングの話

OpenXの場合、impressionをinsertでMySQLに記録するため
物理データファイルのサイズを小さく保つことが大事になります。

特に、インプレッションを記録する
ox_data_raw_ad_impression
テーブルのサイズが重要です。

実数はI/O性能によるので参考にしかなりませんが、
経験的にはデータファイルが800MBを超えたあたりから
急に性能が落ちてきます。

メンテナンススクリプトがテーブルをロックするので、
メンテナンススクリプトの処理時間が長いと
配信が遅延する原因になります。。。
また、データファイルが大きいと
配信自体(ox_data_raw_ad_impressionテーブルへのinsert)自体の
性能も低下する感じです。

と、いうわけで、

  1. 生データ保持期間を短くする
  2. (小さくできれば)データファイルを小さくする
という2つがポイントになります。

生データ保持期間を短くする
OpenXの管理画面で設定します。
ログイン ⇒ Administrator account ⇒ マイアカウント ⇒ 全般設定 ⇒ メンテナンス設定
集計後、統計情報の元データを削除しますか にチェック
統計情報を削除するまでの猶予期間(秒)  を設定
実際にデータが削除されるのは
メンテナンススクリプト(定期メンテナンス or 自動メンテナンス)が
実行されるタイミングです。
データファイルを小さくできるか調べる
show table statusで調査できます。
Data_freeが大きい場合、小さくする余地ありです。
mysql> show table status where name like 'ox_data_raw_ad_impression' \G;
データファイルを小さくする
データファイルが大きくなりすぎた場合、
PostgreSQLならVACUUMコマンドで対応しますが
MySQLの場合はOPTIMIZE TABLE句で対応します。
mysql> OPTIMIZE NO_WRITE_TO_BINLOG TABLE ox_data_raw_ad_impression;
分速80MBくらいのスローペースで、テーブルにロックがかかるので、
頻繁に実施するか/まとめて実施するかは
システムの特性にあわせて選択するのがよいと思います。

[Read More]