TSOが原因でさくらVPSへのウェブアクセスが異常に遅くなるトラブルに遭遇
自宅のネット環境から都道府県別統計とランキングで見る県民性 [とどラン]を運営している、さくらVPSへのアクセスが異常に遅くなるトラブルに遭遇した。
現象としては
- ブラウザ経由のアクセス、ftpクライアント経由のアクセス速度が異常に遅くなる。(数バイト/秒程度)
- 小さいパケットだと問題ないので、pingやtracerouteでは異常が発見されない。
- 自宅ネット環境はDHCPでIPがふられているが、特定のIP,ゲートウェイのセットでのみ発生する。
- 職場の別回線ではそのようなトラブルは一切発生しない。
- 複数のWindowsXPで発生したが、Linuxデスクトップ(Debian)では発生しない。
この件について自宅のプロバイダともやりとりをしたが、原因が見つからなかった。そこでさくらインターネットに問い合わせたところ、すぐに対策法が送られてきて問題は解決した。
サーバー側でTSO(TCP Segmentation Offload)をかけているのが原因で、これをoffにすることで問題は解決した。
http://www.ginnokagi.com/2008/05/vmwaretcp_segmentaion_offload.html
ネットをさまよってみると、どうやらこれはNIC(Network Interface Card)のTSO(TCP Segmentation Offload)と関係するらしい。TSOとは一言で言うと、CPUが処理していたTCP接続をIPパケットに分解する仕事の一部(TCPをセグメントと呼ばれる単位へ分割するタスク)をハードウエア的にNICにやらせてしまおうということだ。そうすればCPUは余計な雑務から開放されるので、その分他の仕事をすることが出きるようになる。
結論から言うと、ホストOSであれ、ゲストOSであれ、LinuxであれWindowsであれ、TSOをオフとするのが無用のトラブルを回避するためのキモとなる。ホストOSがやるべきレイヤー4の処理の一部(TCPセグメント化)をハードウエアに丸投げすれば、その時点でその処理単位は割り込みによる処理の調停ができなくなるのであるから、CPUコンテキストスイッチの折、ホストOS・ゲストOS間でのハードウエアリソース(NIC)の切り替え処理などがうまくいかなくなることがありそうだ。
IPアドレスからさくらVPSと思われるページをいくつか調べたところ、アクセスが異常に遅くなっており、このことに気づいていないさくらVPSユーザーも多いようだ。私も自分の環境で問題が発生しなければ気づかなかった。さくらVPSを使っているユーザーはこの設定をしておくことをおすすめする。
さくらインターネットでもFAQに掲載しているようだが、私の検索能力では引っかからなかったので、後に続く人のためにもエントリーとしてあげておく。
ページが見つかりません|さくらインターネット公式サポートサイト
さくらのVPSにおきまして、不特定のVPS収容ホストとクライアント環境(プロ
バイダ等)の組み合わせにて、VPSからのダウンロード方向の通信に遅延が発生
するとのお問い合わせを複数のお客様より頂いております。
本現象への対策といたしまして、ご利用されるVPSにて以下の設定を推奨させ
て頂きますので、さくらのVPSをご利用中のお客様におかれましては、サーバ
設定の修正をお願いいたします。
■現象
・http,ftp,scp等でのファイルのダウンロード速度が極端に遅い。
・ファイルをダウンロード中に通信が切断される。
・ホームページの静的なコンテンツ表示に異常に時間がかかる。
■対策方法
VPS の ネットワークインターフェース設定にて、TSO(TCP Segmentation
Offload)を off へ設定変更を行うことで本現象を回避できる場合があります。
さくらのVPSで提供中の各OS毎の設定手順は下記の通りとなります。
▼ CentOS
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001387
▼ Debian
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001388
▼ Fedora
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001389▼ FreeBSD
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001390
▼ Ubuntu
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001391
2010ワールドカップを野球にたとえてみた
日本の決勝トーナメント進出や4強がどれぐらい大変なことなのか、ワールドカップを野球にたとえて比較してみた。方法はワールドカップ出場国をFIFA世界ランキングの順にならべ、国際野球連盟発表の最新世界ランキングの1位から順に割り当てている。
日本がオランダに勝つのは野球でフランスが韓国に勝つのと同じ難易度で、日本が4強に入るのはベースボールクラシックでフランスが4強に入るのと同じぐらいの奇跡です。
A組
サッカー | 野球 |
---|---|
フランス | ベネズエラ |
ウルグアイ | ドミニカ共和国 |
メキシコ | ニカラグア |
南アフリカ | パキスタン |
ここは中南米が集まってます。
B組
サッカー | 野球 |
---|---|
アルゼンチン | カナダ |
ギリシア | プエルトリコ |
ナイジェリア | タイ |
韓国 | スウェーデン |
カナダは世界ランキング7位。結構高い。
C組
サッカー | 野球 |
---|---|
イングランド | メキシコ |
アメリカ | オーストラリア |
スロベニア | ドイツ |
アルジェリア | チェコ |
実力が拮抗して面白い組になりそう。
D組
サッカー | 野球 |
---|---|
ドイツ | オランダ |
セルビア | イタリア |
オーストラリア | スペイン |
ガーナ | オランダ領アンティル |
ヨーロッパのチームばかりで混戦模様。
E組
サッカー | 野球 |
---|---|
オランダ | 韓国 |
カメルーン | パナマ |
デンマーク | インドネシア |
日本 | フランス |
どう考えても韓国とパナマが格上。日本が2位に入るのがどれだけ厳しいか分かるだろう。
F組
サッカー | 野球 |
---|---|
イタリア | 台湾 |
パラグアイ | 南アフリカ |
スロバキア | クロアチア |
ニュージーランド | 香港 |
台湾はラクに予選を勝ち上がりそうだ。
G組
サッカー | 野球 |
---|---|
ブラジル | キューバ |
ポルトガル | 日本 |
コートジボアール | イギリス |
北朝鮮 | パラオ |
野球でも明らかな死の組。下手をすると日本の予選落ちもありうる?
H組
サッカー | 野球 |
---|---|
スペイン | アメリカ |
チリ | 中国 |
スイス | フィリピン |
ホンジュラス | ロシア |
アメリカが頭一つ抜けている。
google.loader.ClientLocation.address.regionを使ってアクセスログに都道府県名を書き込む方法
Google AJAX API の google.loader.ClientLocation.address.region を使えば、アクセスしたユーザーの都道府県が取得できる。これでユーザーの都道府県別アクセスを取得できるかと思ったら一筋縄ではいかなかった。
私のサイトではアクセスログを Postgres のテーブル上に保存しており、以下のような処理で都道府県名をログテーブルに格納している。
1).ユーザーがアクセス
↓
2).動的にコンテンツを作成
↓
3).コンテンツ作成と同時にアクセスログに情報を書き出す。ユーザーのIPと都道府県は以下の通り。
IP:環境変数のREMOTE_HOST
都道府県:空白
↓
4).コンテンツの body に onload() を設定し、google.loader.ClientLocation.address.region を呼び出す。
↓
5).ユーザーのIPと都道府県を取得して AJAX でサーバーに送信
↓
6).アクセスログの該当IPを検索し、都道府県名が空白だったら都道府県名を UPDATE する。
実際の6).ではユーザーのアクセスごとに UPDATE するのは冗長なので、「IP=都道府県情報」を一定時間保存しておき、重複を排除した上で cron 経由で UPDATE 処理している。
IPと都道府県名の関連が時間の経過とともに変化する可能性もゼロではないので、「都道府県名が空白だったら」という条件を付け加えて、過去に格納した都道府県名は UPDATE していない。
LPO(Landing Page Optimization)をやってみた
新・都道府県別統計とランキングで見る県民性にLPO(Landing Page Optimization)を施してみた。
LPOとは検索エンジンから最初に入ってくるページを最適化することで、具体的には検索キーワードにあった記事を表示するようにした。
というのも、ログを見ていると様々な検索記事からトップページにアクセスしていることが分かったからだ。新・都道府県別統計とランキングで見る県民性はブログ風の記事表示方式をとっているため、トップページの内容が常に最新の内容に置き換わっている。検索エンジンはその都度、クロールして情報をキャッシュし、そこから検索結果を導き出している。
たとえば今日のトップページには最新記事としてVリーグ男子の統計が表示されているが、一週間もすればトップページから消えてしまうだろう。消えてしまった状態で「Vリーグ男子」の検索ワードからトップページに来たとすると、該当記事がトップページにないため、せっかくのアクセスが無駄になってしまう。
そこで、検索語句をリファラーから抽出し、それに合わせた記事を表示するように変更した。
百聞は一見に如かず。下記から試していただきたい
yahooで「家電量販店 勢力図」を検索
このページからtodofuken.ww8.jpにアクセスした場合と
からアクセスした場合では同じURLでも違う内容が表示されているはずだ。
いきなりyahooニュースからリンクされた
アクセスログを見ていたら見慣れないリファラを発見。たどってみたら新・都道府県別統計とランキングで見る県民性がyahooニュースの花粉症にある「◇県民性いろいろ」という項目にいきなりリンクされていた。
サイト再開から2週間でyahooニュースなら上出来だ。
ただ、サーチエンジンとしてyahooからは、まだほとんどお客さんが来ない。sitemapも登録してあるのでgoogleからはたくさん来るが、yahooは皆無。キッチリ正攻法でサイトを作れば反映されるgoogleに比べてyahooはプラスアルファの見えない部分があるからもうしばらく待つしかないだろう。
少なくともyahooニュース編集者の目にはとまったようだから、yahooからの誘客にも期待したい。
追記:
以前、ホットエントリにも掲載されたことはあるが、やはりアクセスはyahooニュースの方が圧倒的に多い。当たり前といえば当たり前かも。