Upload
modesta-curtis
View
32
Download
5
Embed Size (px)
DESCRIPTION
部分的再ロードによる Java プログラムの再起動の高速化手法. 数理・計算科学専攻 千葉研究室 09M37264 別役 浩平 指導教員 千葉 滋 教授. Java プログラムの再起動. アプリを JVM 上に再ロード、再実行 アプリケーションサーバや DI コンテナで利用 例) JBoss AS 、 Seasar2 HOT deploy サーバを稼働させたままコンポーネントを再配備 例)リクエストの度にアプリを再ロード 対話的な開発に有用. 修正したアプリケーションの再ロード. 新たに作成したクラスローダでロード - PowerPoint PPT Presentation
Citation preview
部分的再ロードによるJava プログラムの再起動の高速化手法数理・計算科学専攻 千葉研究室09M37264 別役 浩平指導教員 千葉 滋 教授
Java プログラムの再起動•アプリを JVM 上に再ロード、再実行▫アプリケーションサーバや DI コンテナで利用▫例) JBoss AS 、 Seasar2
•HOT deploy▫サーバを稼働させたままコンポーネントを再配備▫例)リクエストの度にアプリを再ロード
対話的な開発に有用
2
修正したアプリケーションの再ロード•新たに作成したクラスローダでロード▫同じローダで同一名のクラスの再ロード不可能
•全クラスを再ロード▫サーバのパフォーマンスを低下させる▫HealthWatcher [Greenwood ら ‘ 07] を使った実測値
3
しない場合
再ロードする場合
0 50 100 150 200 250 300
12
261
平均応答時間 (ms)
リクエストの度に
ロード済みクラスの再利用•ローダは親ローダにクラスのロードを委譲可能▫親ローダがクラスをロード済みなら子ローダは
ロードせずに済む
•クラスのロード手順
4
1. 自身でロード済みならば、そのクラスを使用
2. 独自の探索方法でクラスを探索する3. 親ローダの loadClass メソッドを呼び出す
•変更したクラスと依存しているクラスのみを新ローダでロード▫その他は親ローダでロード済みのクラスを再利用
•旧版アプリの部分的な再利用▫アプリのロードを複数ローダに分割
•ロード済みのクラスを出来るだけ再利用▫アプリの再起動を高速化
5
手法 1
手法 2
再ロードするクラス数の削減法
依存しているクラスもロード•クラス内の参照はそのクラスをロードした
ローダが動的に解決▫シンプルな実装では期待する動作は得られない
6
親
子
A は親がロードした B を参照
変更した Bは
参照不可
A B C
BB
アプリの開始ノード
A は変更した B を参照
A
アプリの開始ノード
変更した B を参照可能
手法 1
旧版アプリの部分的な再利用•前提
1. 各クラスに異なる機能を実現する複数の版がある2. 各クラス異なる版の組み合わせで何度も再起動
例)クラス A は版 1 、クラス B は版 2 で再起動 次は A は版 2 、 B は版 1 で再起動
3. ユーザによるヒント どのクラスの版を変更するか
•アイデア▫クラスの版毎にクラスローダを作成▫再起動時に親ローダとして活用
7
手法 2
•クラスの版の集合とそれぞれの優先度▫優先度は事前に計算しておく
例 1 )クラスの版と依存するクラスのサイズの合計 例 2 )クラスの版の利用されやすさ
•アプリケーションを再ロードするクラスローダ▫旧版アプリのローダ群を親ローダとして活用
8
手法 2
入力
出力
再起動時に使用する子ローダの作成 ( 1 )
• [ 初期状態 ] システムクラスローダ1個▫原版クラス( A0 、 B0 、 C0 、…)をロード済み
System
A の版 1 をロード
B2 、 A1
( 優先度 : B2 > A1)
B2 、 E3 、 D2
( 優先度 : B2 > E3 > D2)
B2 、 E3 、 C1
( 優先度 : B2 > E3 > C1)
C1
D2
E3
B2
A1
再起動時に使用する子ローダの作成 ( 2 )
B2 、 E3 は親に依頼B2 は親に依頼
出力
出力 出力
入力
9
手法 2
優先度による再ロードするクラスの削減
•例) 各クラスに依存しているクラス数▫A1 = 52 、 B2 = 38 、 C1 = 27 (優先度 A1 > B2 > C1 )
10
手法 2
System
B2
A1
System
A1
B2
C1
C1
A1
C1
B2
C1
65+ 27 = 92
27+ 79 = 106
再ロードするクラス数>
B2 、 C1A1 、 C1
27
52 38
27 2727
依存しているクラス数
入力
•各ローダがロードするアプリは異なる▫クラス間の依存関係も異なる
•ローダ L がロードするクラス群 S▫ あるクラスの版 C と C の原版に依存しているクラスの集合を SC と
表現する▫ ローダ L がクラスの版 C をロードをするとき、 S ← SC
▫ L の全ての親ローダについて、 親ローダがロードするクラスの版 D が S 内のクラスに参照を持つと
き S ← S + SD とする
クラスの版毎のクラスローダ
11
手法 2
応用: Per-session AOP フレームワーク
•ユーザ毎に機能が拡張された Web アプリを実現▫リクエストの度にクラスローダの作成▫ユーザが選択した機能を実装したクラスの版で置
換▫全クラスを再ロード
•例) iGoogle
12
手法 2
[ 戸部ら ’ 08]
リクエスト
サーバ ユーザ
見え方や機能が異なる
サーバ
大規模ホスティングサービス•例)ショッピングサイト▫サイト(各サイトのユーザ全体)毎に機能を拡張
13
ベースアプリ
サービスベンダー
サイト A
追加したクラス
フレームワークの適用例
異なるローダでロード
サイト B
手法 1 と手法 2 の比較•例) 1 回目は A1 、 B1 、 C0 を用いて再起動 2 回目は A1 、 B0 、 C1 を用いて再起動
14
System
A1
B1
C1
System
A1
B1
A1
C1
C1
B1 は不必要
手法 1 手法 2
再ロードするクラス数 : 手法 1 > 手法 2クラスローダ数 : 手法 1 < 手法 2
実験•フレームワークに提案手法をそれぞれ実装▫全クラスを再ロード(手法 0 )、手法 1 、手法
2▫HealthWatcher を動作( 100 ユーザ)
健康管理用 Web アプリ( 9 KLOC )▫アプリの各クラス用に新版を 1 つ用意
新版と原版の 2 バージョンを持つ▫優先度
クラスの版と依存しているクラスのサイズ × 版の利用者数
15
• 実験環境▫ Client マシン
OS : Windows Server 2003 CPU : Core 2 Duo 3.00 GHz Memory : 4 GB
▫ Server マシン OS : Linux 2.6.26 CPU : Xeon 2.83 GHz Memory : 4 GB
新版クラスの選択パターン•選択パターン( n, m )毎に平均応答時間を測定▫n … Servlet クラスの新版の選択数▫m … コールグラフ上のクラスの新版の選択数
•例)実験( 2, 5 )▫全ユーザが各々 Servlet クラスの新版から 2 個
コールグラフ上のクラスの新版から 5 個
16
D
B
A
CE
H
GI
FServlet
平均応答時間(手法 2 )と新版クラス使用数
•新版クラス使用数 = n + m•平均応答時間は変更されるクラス数に比例▫横軸:新版クラスの選択パターン
平均応答時間で昇順にソート
17
0
5
10
15
20
25
30
35
40
45
50
新版クラス選択パターン
平均応答時間
(ms)
0
10
20
30
40
50
60
70
80
f(x) = 0.0415296129576416 x + 16.1888865967058
新版クラス選択パターン
新版クラス使用数
(個)
新版クラス使用数 (線形回帰直線 )
3 つの手法の平均応答時間の比較•どの選択パターンでも手法 1 と 2 は手法 0 より高速
•手法 1 と 2 は選択パターンによって使い分ける必要
18
0
5
10
15
20
25
30
35
40
45
50
55
f(x) = 0.0094050814485483 x + 32.0754594916623
f(x) = 0.0175254913377595 x + 12.9185450507161
手法 0
Linear ( 手法 0)
手法 1
Linear ( 手法 1)
手法 2
新版クラス選択パターン
平均応答時間
(ms)
手法 0 (線形回帰直線 )
手法 1 (線形回帰直線 )
手法 1 と手法 2 の使い分け•ほとんどの選択パターンで手法 2 が高速▫新版クラス使用数が 56 個(全クラスの 76% )以
上のとき手法 1 が高速 但し、 n << m のときは手法 2 が高速
19
0
5
10
15
20
25
30
35
40
45
50
0
10
20
30
40
50
60
70
80
手法 1Linear ( 手法 1)手法 2アスペクト使用数Linear ( アスペクト使用数 )
新版クラス選択パターン
平均応答時間
(ms)
新版クラス使用数
(個)
56 手法 1 の平均応答時間(線形回帰直線 )手法 2 の平均応答時間
新版クラス使用数 (線形回帰直線 )
新版クラス使用数
n << m の状況•例)( n 、 m ) = ( 1 、 5 )▫n … Servlet クラスの新版の選択数▫m … コールグラフ上のクラスの新版の選択数
20
A
Servlet クラス 再利用可能
B
C
E
H
D
F
G
I
B
C
E
A
H
D
F
G
ID
B
A
C
E
H
F
G
ID
B
A
C
E
H
F
G
I
関連研究• Dynamic Class Loading in the Java Virtual Machine [Liang ら '98]▫クラスローダのアーキテクチャを提示▫ロードのメカニズムや型の安全性など
• JAsCo [Suvée ら '03]▫ HotSwap を用いた DAOP システム▫ JVM にロード済みの特定クラスの定義を置換可能▫メソッド本体しか変更できない
• Sister Namespace [佐藤ら '05]▫異なるローダでロードされたクラス間のバージョンバリアを緩和▫あるクラスの版のインスタンスを異なる版の変数に代入可能
21
まとめ•再起動を高速化するための手法を提案▫変更対象クラスと依存しているクラスを再ロード▫旧版アプリを部分的に再利用▫実験
既存手法のパフォーマンスを改善 2 手法の優劣が状況によってわかれることが判明
•これまでの活動▫論文
SWoPP ’09 @ 仙台 PRO ’10 @ 宮古島(投稿中)
▫ポスター PPL ’09 @ 高山 AOSD ’10 @ Saint-Malo
22