ここから本文です

Webサーバ設定やネットワーク技術に詳しい方のご意見を賜りたく!(2)

ota********さん

2011/7/1607:40:16

Webサーバ設定やネットワーク技術に詳しい方のご意見を賜りたく!(2)

Webサーバ(アパッチ)でのKeepAlive設定について質問です。
現在自社にてJavaスクリプト(AJAX)でつくられた特定の業務プログラムをWebサービスとしてインターネット上で提供しています。(いわゆるASPサービスです。)
通信プロトコルはhttpsです。Webサーバーにはアパッチ、アプリケーションサーバにトムキャットを利用しています。
業務プログラムのここの機能(データ入出力機能、グラフ出力機能、メール送信機能など)はWebサービスとして構成されていおり、画面も画像等結構使っているため、発生する電文量は比較的多く、性能的には少々重いプログラムです。

利用するお客様は企業ネットワークを介してのお客様が多く、従いまして当方サーバと通信する経路も複雑な場合が多いですが、お客様ネットワークが①帯域がせまい、②通信量が多く帯域を圧迫している、VPNを張っている、一部にモバイル網であるなど、少々「難有り」なケースで当方業務プログラムのhttp電文がロスト(ヘッダー部は届くがBody部が届かない)し、アッパッチ設定上のタイムアウト値がくるまでフリーズする現象がでています。フリーズしないまでも通信エラーで通信が一度切れる場合もあります。フリーズや通信エラーを検知するタイミングは業務画面にある各種ボタンを押下し、DB登録等のサーバ処理を走らせた直後に起こるケースが多いです。(DB登録やメール送信等サーバ側処理は正常に終了しているケースが多い)

このような現象を改善するために試行錯誤している状況ですが、KeepAlvie設定を無効にしてみたタイミングでと現象の発生頻度が激減したという報告をお客様よりうけました。実は同じタイミングでお客様ネットワーク側の回線調整も実施されている可能性もあり、本当にKeepAliveを無効にしたことで現象が改善したのかどうかは分かりません。
もう一度KeepAliveを有効にして切り分けてみればよいのかもしれませんが、現在の良好な状態を一時的でもまた元に戻る可能性をお客様に了承頂けないので迂闊には実施できません。

お聞きしたいのは、
①KeepAliveが原因で通信が不安定になるような事例はあるのか?ある場合、それはどのようなケースがあるのか。
②KeepAlveの無効化が現象の発生頻度を抑える効果がある状況だとして、KeepAliveを無効化する以外のチューニング方法は考えられないか?

などです。よろしくお願いします。

閲覧数:
1,481
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

bar********さん

2011/7/1908:32:03

微力ながら…お力になれればと思います。

まず、検証環境を構築されることをおすすめします。
ネットワークは既存のものでお客様の使用端末、回線、VPN設定も(要件を)同じにして再現するか確認します。
サーバー側でWireSharkなどのパケットキャプチャも同時に走らせておきます。
これで原因がだいぶ特定できるのではないでしょうか。

その上でですが…

概ね1番目の方と同じ意見で、補足的な感じです。

>①KeepAliveが原因で通信が不安定になるような事例はあるのか?ある場合、それはどのようなケースがあるのか。
KeepAliveは一定時間接続を維持する設定です。
"KeepAliveが原因で通信が不安定になる"というよりも、モバイルなどネットワークの信頼性が低い(パケットロスが発生しやすい)環境であれば、
毎回接続を確立したほうがシステムとしては安定します。また、ネットワーク切断の検知やデバッグもしやすくなります。
その分、トラフィックは各ヘッダ分だけ増加しますが、近年のWebアプリケーションのトラフィック量と比べると微量だと思います。
逆にKeepAliveが活きる環境は社内ネットワークなどの高い信頼性が確保できる場合です。
それ以外は使わないようにしたいですね。

②KeepAlveの無効化が現象の発生頻度を抑える効果がある状況だとして、KeepAliveを無効化する以外のチューニング方法は考えられないか?

モバイルのWeb開発の経験は少ないのですが、いくつか方法はあると思います。

・通信量を圧縮する
・専用アプリを開発し、API経由で通信する

■通信量を圧縮する
・mod_deflate によるコンテンツの圧縮
(確かZip圧縮されるはず。ただし、ブラウザが対応していなければならない)
・コードジェネレータ によるコードの圧縮
(無駄なコメント、タブ、空白、改行を除き、HTMLを最低限の構成要素に再構成するコードジェネレータを作る。Googleなんかはそうです)
結果的に送信パケット量が減って全体的な安定性の向上にもつながります。

■専用アプリを開発し、API経由で通信する
・データ入出力・グラフ出力・メール送信用のAPIをサーバー側で用意しておく。
モバイル環境ではモバイル端末専用に軽いアプリを作っておき、各機能を使用するときだけAPI経由で通信する。


ざっとこんな感じです。
ご参考になれれば幸いです。

質問した人からのコメント

2011/7/19 11:56:49

降参 コメントくださった皆さまありがとうございました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

ieq********さん

2011/7/1704:09:04

素朴な疑問。
それなりの企業なら、さっさとロードバランサー入れればいいだけじゃ?

kit********さん

2011/7/1610:48:36

>①KeepAliveが原因で通信が不安定になるような事例はあるのか?ある場合、それはどのようなケースがあるのか。

これは、Webサーバへの接続が長い期間必要ない場合、その接続が長期間(数分)残ることで、Apacheの処理能力(MaxClientsなどの制限を含む)を越える接続が無駄に立ってしまう場合に考えられます。

大量に画像ファイルを参照させるようなページはKeepAliveの設定は有効です。データをダウンロードする度に新しい接続を確立しなくとも、KeepAliveのおかげでデータ受信を1接続で行えるからです。

KeepAliveが原因で通信が不安定になる場合は、Apacheが処理している子プロセス数が限界に近い可能性が考えられます。Webサーバへのアクセス数や、起動するApacheプロセス数などを観察されるとこの点はっきり出来るかもしれません。

KeepAliveが有効の場合、クライアントからの接続は一定期間残ります。この残った通信と新たに接続する通信とがこんがらがってタイムアウトなどの結果になるんだと思います。「まだ接続ありますよ~」的な考えにぶつかり新規接続が不安定になるのかと。

>②KeepAlveの無効化が現象の発生頻度を抑える効果がある状況だとして、KeepAliveを無効化する以外のチューニング方法は考えられないか?

KeepAliveが原因で、その他の対策は考えられません。
もし、.htaccessの設置やhttpd.confの設定で特定のコンテンツのみクライアント側にキャッシュする時間を指定しているなどキャッシュさせる仕組みを導入されているなら、キャッシュを取らないようにしてみるのもいいかもしれません。

KeepAliveは、大抵のWebコンテンツが1ファイルではなく複数のファイル(画像など)で作成されているため、だったら接続した1回でデータを取りきれるように接続を生きつづけさせる為に「KeepAlive」なわけです。WebアクセスがDBの更新など決まった1処理の為に行われるのであれば、KeepAliveはOffの方が好ましいです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる