アクセス集中時の Webサーバの性能に対する OSの影響

Slides:



Advertisements
Similar presentations
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Curlの特徴.
安全なログオン手順 2004/08/26 Port139 伊原 秀明.
Webプロキシサーバにおける 動的資源管理方式の提案と実装
コンピュータプラクティス I 再現性 水野嘉明
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
クラウドにおける ネストした仮想化を用いた 安全な帯域外リモート管理
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
過負荷時のWebアプリケーションの性能劣化を改善する Session-level Queue Scheduling
中村孝介(九州工業大学) 光来健一(九州工業大学/JST CREST)
KVMにおけるIDSオフロードのための仮想マシン監視機構
マルチプラットフォーム対応 P2Pファイル共有ソフトの開発
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
大きな仮想マシンの 複数ホストへのマイグレーション
ネストした仮想化を用いた VMの安全な帯域外リモート管理
帯域外リモート管理の継続を 実現可能なVMマイグレーション手法
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
VMマイグレーションを可能にするIDSオフロード機構
サスペンドした仮想マシンの オフラインアップデート
過負荷時のWebアプリケーションの 性能劣化を改善する Page-level Queue Scheduling
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
型付きアセンブリ言語を用いた安全なカーネル拡張
SAccessor : デスクトップPCのための安全なファイルアクセス制御システム
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
仮想マシン間にまたがる プロセススケジューリング
特定ユーザーのみが利用可能な仮想プライベート・ネットワーク
仮想計算機を用いて OSを介さずに行う安全な ファイルアクセス制御
分散IDSの実行環境の分離 による安全性の向上
他のプロセスに あたえる影響が少ない 実行時ミラーリングシステム
VM専用仮想メモリとの連携による VMマイグレーションの高速化
IaaS型クラウドにおける インスタンス構成の動的最適化手法
仮想マシン間プロセススケジューリングの 実環境への適用にむけて
リモートホストの異常を検知するための GPUとの直接通信機構
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
インターネットにおける真に プライベートなネットワークの構築
実行時情報に基づく OSカーネルのコンフィグ最小化
仮想メモリを用いた VMマイグレーションの高速化
オペレーティングシステム イントロダクション
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
ネットワークプログラミング (5回目) 05A1302 円田 優輝.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
アナライザ パケットを収集 測定用のマシン 通信.
東京工業大学 情報理工学研究科 数理・計算科学専攻 千葉研究室 栗田 亮
他のプロセスに与える影響の少ない 実行時ミラーリングシステム
クラウドにおけるVM内コンテナを用いた 自動障害復旧システムの開発
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
複数のオーバレイネットワークを制御するためのプライベートなネットワーク環境
TCP制御フラグの解析による ネットワーク負荷の推測
複数ホストにまたがって動作する仮想マシンの障害対策
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
セキュリティ機構のオフロード時の 性能分離
ウェブアプリケーションサーバの Degradation Schemeの 制御に向けて
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
仮想環境を用いた 侵入検知システムの安全な構成法
Cell/B.E. のSPE上で動作する 安全なOS監視システム
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
卒業研究 JCSPを用いたプログラム開発  池部理奈.
GbEにおける TCP/IP の研究について
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
強制パススルー機構を用いた VMの安全な帯域外リモート管理
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
複数ホストにまたがるVMの 高速かつ柔軟な 部分マイグレーション
特定ユーザーのみが利用可能な仮想プライベート・ネットワーク
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
ソケットの拡張によるJava用分散ミドルウエアの高信頼化
強制パススルー機構を用いた VMの安全な帯域外リモート管理
Presentation transcript:

アクセス集中時の Webサーバの性能に対する OSの影響 東京工業大学 千葉研究室 日比野秀章 松沼正浩 光来健一 千葉滋

アクセス集中によるサービスの滞り あるサイトで、 人気イベントのチケットを販売することにした チケットを購入しようとアクセスが集中 ページの閲覧が急にしづらくなる ?

チューニングにより調整 システム変更により問題が生じる 解決するためにはチューニングが必要 手間・労力がかかる 実行スレッド数 JDBCコネクション・プールの設定 クラスタリング デプロイメント・ディスクリプタ システム変更により問題が生じる E.g. ページを閲覧しづらい 解決するためにはチューニングが必要 手間・労力がかかる 各種パラメータの調整 Application AP Server ヒープサイズ GCの設定 JVM OS カーネルパラメータ (ファイル数、プロセス数) TCP/IPの設定パラメータ ソケットのバッファサイズ Hardware CPU メモリ

苦労してチューニングしても 実行環境の変更が要求される セキュリティの問題によりOSを変更 顧客の要望で、OSを変更 ハードウェアの変更により、ソフトウェアが対応しなくなる JVMの変更 等など・・・ 挙動が変わってしまう

予備実験:OSによる挙動の違い 対象とする処理 リクエストの投げ方 対象とするOS 軽い処理:フィボナッチ数の計算 実行環境 [サーバマシン] CPU:Intel Xeon 3.06GHz×2 メモリ:2GB ネットワーク:1000BaseTX [クライアントマシン×14] CPU:Pentium 733MHz メモリ:512MB ネットワーク:100BaseTX [Web App サーバ] Tomcat 5.0.25 [JVM] Sun JDK 1.4.2 対象とする処理 軽い処理:フィボナッチ数の計算 重い処理:XMLファイルをパースし、 DOMツリーを100回探索 リクエストの投げ方 軽い処理に常時30 重い処理に常時1,5,10,20,40 対象とするOS Solaris 9, Linux 2.6.5, FreeBSD 5.2 1, Windows 2003 Server Enterprise Edition

落ち込まない 落ち込む 落ち込む 落ち込む

面倒 チューニングのやり直し OSの変更によりWeb App サーバの振る舞いが変わってしまった 手間・労力がかかる 実行環境の他の部分でも同様のことが起こると考えられる 面倒

目標と本発表の内容 目標 OS毎に挙動が異なる要因を検証 実行環境によらず指定した挙動を実現 仮説1:ネットワーク処理 仮説2:GC 面倒なチューニングを省略 E.g. Solarisと同様の振る舞いを、様々な実行環境で実現 一部の処理(重い処理)の増加時に、他のサービス(軽い処理)への影響が少ない OS毎に挙動が異なる要因を検証 仮説1:ネットワーク処理 仮説2:GC 仮説3:OSのスケジューラ

仮説1:ネットワーク処理の影響 コネクション失敗や再送の頻度を測定 リクエストの投げ方 パケット送受信の統計情報を調べる 軽い処理に常時30 重い処理に常時40 パケット送受信の統計情報を調べる クライアントマシン側でnetstatを使用

ネットワークの通信の失敗は少ない どのOSの場合も Solaris Linux FreeBSD Windows 再送はほとんど起きていない 軽い 処理 重い処理 重い 処理 接続数 28171 669 1977 834 5945 778 3570 958 接続失敗回数 受信セグメント数 140996 3613 10011 4372 29317 4111 17602 5049 送信セグメント数 141196 3723 10080 4485 29981 4218 18145 5208 再送回数 7 2 4 9 14 どのOSの場合も 再送はほとんど起きていない コネクションの失敗は起きていない

仮説1:ネットワーク処理の影響 ネットワーク処理にかかる時間を測定 SYNパケットの受信からシステムコールacceptの完了までにかかる時間の計測 リクエストの投げ方 軽い処理にのみ常時30 軽い処理に常時30,重い処理に常時80 SolarisとLinuxで実験

ネットワーク処理の処理時間に 差はない SolarisとLinuxであまり違いは見られない ネットワーク処理が要因とは考えにくい 接続失敗回数 再送回数 処理時間 ネットワーク処理が要因とは考えにくい Solaris Linux

仮説2:GCによる影響 GCを止めて同様のプログラムで測定 実験① 実験② javaのloggcオプションによりGCの情報を収集 数値処理に常時80リクエストを投げる 実験② 軽い処理と数値処理で予備実験と同様の実験 数値処理:フィボナッチ数の計算(軽い処理より重い計算)

落ち込まない 落ち込む 予備実験の実験結果と 傾向は同じ 落ち込む 落ち込む

GCが原因とは考えにくい 重い処理の場合と数値処理の場合で 傾向は同じ GCの有無はあまり関係ない 重い処理‥‥GCが頻発

仮説3:OSのスケジューラ スケジューリングの待ち時間を測定 リクエストの受信から、実際のJavaプログラムが実行を開始するまでの時間 特にカーネル内のシステムコールでのスケジューリング カーネル内処理(実行待ち) Javaプログラム CPUのみ acceptの完了 poll recv ・・・

スケジューリングが要因の可能性大 リクエストの投げ方 SolarisとLinuxで実験 実験結果 軽い処理にのみ常時30 軽い処理に常時30, 重い処理に常時80 SolarisとLinuxで実験 実験結果 Linuxでは、カーネル内の処理時間が長い スケジューリングの頻度が高い箇所で処理時間長 カーネル内処理 Javaプログラム カーネル内処理 Javaプログラム

スケジューラの違いが原因だとすると アプリケーションレベルでスケジューリングすれば、実行環境によらずに同じポリシーで動作できる 簡易制御 sleep命令を挿入することで強制的に重い処理のスケジューリング頻度を下げる 実験方法 リソースを大量に使用する処理(重い処理)を一時停止 一時停止しない(S0) 重い処理の毎回の探索の終り 毎回の停止時間は20,40,60,80,100ms (S2,S4,S6,S8,S10) リクエストの投げ方 軽い処理に常時30 重い処理に常時20

簡単な制御であれば可能 挿入するsleepの長さ次第で、OS毎の挙動の違いを埋められる可能性有 Sleep命令挿入により 軽い処理増 重い処理減

まとめ 目標 予備実験 要因検証の実験 有効性確認の実験 実行環境によらず指定した挙動を実現したい Web App サーバの振る舞いが実行環境の影響を強くうけることを例示 要因検証の実験 Web App サーバの振る舞いにOSのスケジューラが強い影響を与えている可能性が高い 有効性確認の実験 アプリケーションレベルのスケジューリング

今後の課題:要因の検証 Web App サーバの振る舞いに強く影響する要因をさらに検証 スケジューリングの検証はLinuxでしか行えていないが、他のOSでも検証 各スレッドのスケジューリングのされ方を調査 タイムスライスとスケジュールの頻度 各OSでのスケジューリングポリシーの調査 他のリソースを使用する処理(ディスク等)についても同様に実験を行い、OS別で比較

今後の課題:スケジューラ 様々な実行環境でユーザーが指定した挙動が得られるようにする アプリケーションレベルでのスケジューリング 例えば、検証実験で行ったsleep命令を利用した制御 sleep命令の長さ、頻度、場所の検討が必要 Progress-based regulation [J.R.Doucer 99]を利用した、サーバの状態に応じた制御