...

Oracle WebLogic Server パフォーマンス・チューニング

by user

on
Category: Documents
908

views

Report

Comments

Transcript

Oracle WebLogic Server パフォーマンス・チューニング
<Insert Picture Here>
Oracle WebLogic Server パフォーマンス・チューニング
日本オラクル株式会社 Fusion Middleware事業統括本部 ソリューション本部
Application Gridソリューション部
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。
また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことは
できません。以下の事項は、マテリアルやコード、機能を提供することをコミットメン
ト(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さ
い。オラクル製品に関して記載されている機能の開発、リリースおよび時期につい
ては、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文
中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright© 2011, Oracle. All rights reserved.
2
Agenda
•
•
•
•
•
•
パフォーマンス・チューニング概要
Java EE環境におけるチューニング・ポイント
Java EEアプリケーションのチューニング
Java EEサービスのチューニング
WebLogic Serverのチューニング
JVMのチューニング
Copyright© 2011, Oracle. All rights reserved.
3
<Insert Picture Here>
パフォーマンス・チューニング概要
Copyright© 2011, Oracle. All rights reserved.
4
前提条件と要件(目標)の設定
• システムの「性能」を考える場合、前提条件と要件を明確にする
•
•
•
•
•
•
•
対象アプリケーション
最大ユーザ数
時間当たりの要求数
リクエストのデータ量
レスポンスのデータ量
内部処理(DBからのデータ取得や書き込み等)のデータ量
性能要件
• WebブラウザでSubmitしてから画面表示終了まで3秒以内
• 2時間以内に 5000万件のデータに対する処理を完了させること
Copyright© 2011, Oracle. All rights reserved.
5
性能が問題になった場合
• 原則、ボトルネックを見出すことが解決策
• ボトルネックの調査にはJRockit Flight Recorderが有用(WebLogic10.3.3以降)
• JVMをJRockitにしてフライト記録を取り続ける運用にする。
• チューニングで対応できるのであればよいが、下記のように想定外の
要因の場合は、根本的なシステム構成の見直しが必要になる。
• 想定より多くのユーザがアクセスしている
• 想定よりも膨大なデータを処理している
• CPUはほぼ100%使い切っている
• そのリスクを削減するには、性能面で拡張できる構成を検討しておく
べき
• または、リクエスト制限を行う仕組みを検討しておくべき
H/WやS/Wのチューニングで対応できるか否かの
見極めが重要
Copyright© 2011, Oracle. All rights reserved.
6
チューニングの余地があると思われる事象
• DB
• 扱うデータ量が多いわけでもないのに特定のSQLが遅い
• Disk I/Oに時間がかかっているがCPU使用率が高いわけではな
い
• DB側で内部処理でロックによる待機イベントが発生している
• Webアプリケーション・サーバ(Java EE)
• 特定のアプリの特定の処理時間だけが遅い
• フルガベージ・コレクションが頻繁に発生している
• CPU使用率が高いわけではないのにレスポンスタイムが悪い
Copyright© 2011, Oracle. All rights reserved.
7
アプリケーションの変更を要する場合
• Javaのコーディング一般的によく言われる基本事項
• 文字列連結ではStringオブジェクトと+演算子を使わず、StringBufferオブ
ジェクトのappendメソッドを利用せよ
• Collectionオブジェクトのサイズは生成時に指定して動的拡張しないよう
にせよ
• 不要になったオブジェクトリファレンスにはnullを代入せよ
• しかし性能問題発生時には、上記のような基本事項を修正して問題が解
決するケースは稀。
• プログラムの構造的な見直しを要する場面
• JDBCでSQL実行によりデータを取得するのではなく、キャッシュからデー
タを取得する。
Copyright© 2011, Oracle. All rights reserved.
8
<Insert Picture Here>
Java EE環境におけるチューニング・ポイント
Copyright© 2011, Oracle. All rights reserved.
9
Java EEサーバ環境のチューニング・レイヤ
WebLogicでは
WebLogicでは
ApacheやIISなど
WebLogic管理対象サーバ
ネットワーク
Java EEコンテナ
Webコンテナ
EJBコンテナ
JDBC
Webサーバ
JavaVM
OS
OS
H/W
H/W
WebLogicではWebサーバプラグイン
Copyright© 2011, Oracle. All rights reserved.
WebLogicでは
JRockitなど
10
Java EE環境おけるレイヤ別着眼点
HttpSessionに大量のオブジ
ェクトを長時間保持させてい
JavaScript処
理に負荷がか
かっていない
か?
リクエストの受け付け
窓口の数は適切
か?
ないか?
窓口数を増加させた
場合のCPUやメモリ
負荷は問題無い
か?
オブジェクト生成ロジックに無
駄が無いか?
オブジェクトの解放漏れはな
いか?
アプリ
Web
HTTP
ブラウザ
データベースへのコネ
クション・プーリングの
数は適切か?
Web
Java EE
サーバ
コンテナ
JDBC
データベース
JVM
リクエストの受け付け窓口
の数は適切か?
窓口数を増加させた場合
のCPUやメモリ負荷は問
題無いか?
ヒープメモリ設定は適切か?
SQL処理に時間がかかって
いないか?(特に、解析、I/O
系処理に)
ヒープメモリを増減した場合のCPU、メ
モリの負荷とGCの頻度と時間は?
Copyright© 2011, Oracle. All rights reserved.
11
Java EEにおける性能面での留意事項①
• APサーバが使用するJDKは許容される限り最新のものを使用する
• 例:JDK1.5.0_06よりは、JDK1.5.0_16を
• JDKは、提供ベンダーやバージョンによりGCの動作やヒープ構造、
オプション指定が異なる。
• HttpSessionオブジェクトのサイズやライフサイクルに注意する
• HttpSessionオブジェクトに格納するObjectは最低限にする。
• ログアウト処理などで不要になるオブジェクトは明示的に破棄する
• タイムアウトを無制限にしない。
• ServletではSingleThreadModelインターフェースを実装しない
• (基本的に)リクエスト毎にServletインスタンスを生成してしまう
• APサーバにより実装が異なる場合がある
• Servlet 2.4 API仕様では非推奨
Copyright© 2011, Oracle. All rights reserved.
12
Java EEにおける性能面での留意事項②
• DB接続ではAPサーバが提供するデータソース
(javax.sql.DataSource)を利用し、接続プールを利用する
• 接続プールより取得した java.sql.Connectionオブジェクトは、JDBC
処理が終了後必ず close( )メソッドで解放する
• 正常終了/異常終了にかかわらず必ずfinally句でclose ()を実行する。
• 接続プールで保持する接続数の初期容量と最大容量を同じにしてお
く
• SQLは同一で条件値のみ変化する処理を繰り返す場合は、
java.sql.PreparedStatementを使用する
Copyright© 2011, Oracle. All rights reserved.
13
JDBC処理をfinallyブロックでcloseする例
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("jdbc/OracleDS");
conn = ds.getConnection();
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT EMPNO, ENAME FROM EMP");
while (rset.next() ) {
// rset.getString(―ENAME‖); などでデータ取り出し
}
}
catch (SQLException sqlex) {
// 例外時の処理
}
finally {
try {
if (rset != null ) { rset.close(); }
if (stmt != null) { stmt.close();}
if (conn != null) {conn.close();}
}
catch (Exception ex) {}
}
Copyright© 2011, Oracle. All rights reserved.
14
PreparedStatementの利用
• PreparedStatement使用時はDB側の解析処理が減るた
め性能向上が期待できます。
Statement使用時
Statement stmt = conn.createStatement();
for ( int id = 0 ; id < 10000 ; id++ ) {
String sql = "SELECT ENAME FROM EMP WHERE EMPNO = " + id;
ResultSet rs = stmt.executeQuery(sql);
while ( rs.next() ) {
// 表示などの処理
}
}
PreparedStatement
使用時
String sql = "SELECT ENAME FROM EMP WHERE EMPNO = ?";
PreparedStatement ps = conn.prepareStatement(sql);
for ( int id = 0 ; id < 10000 ; id++ ) {
ps.setInt(1,id);
ResultSet rs = ps.executeQuery();
while ( rs.next() ) {
// 表示などの処理
}
}
Copyright© 2011, Oracle. All rights reserved.
15
WebLogicチューニング
• WebLogicのチューニングについて、以降の章では下記
の観点で説明します。
•
•
•
•
Java EEアプリケーションのチューニング
Java EEサービスのチューニング
WebLogic Serverのチューニング
JVMのチューニング
Java EE
アプリケーション
Web
ブラウザ
HTTP
Web
Web
サーバ
Logic
JDBC
データベース
JVM
Copyright© 2011, Oracle. All rights reserved.
16
<Insert Picture Here>
Java EEアプリケーションのチューニング
- JSP, Servlet
- EJB
Copyright© 2011, Oracle. All rights reserved.
17
JSP①
• JSPの再変換と再コンパイルのチェック間隔の指定
• Webアプリケーションのweblogic.xmlで下記を指定
• <jsp-descriptor> のpage-check-seconds で秒指定。
• WebLogicの動作モードが「開発」の場合はデフォルトで1秒単位でチェック
• WebLogicの動作モードが「プロダクション」の場合はデフォルトではチェック無し(-1を指
定)
• 「プロダクション」モードで運用中にJSPの変更がない場合はチェック無し(-1)でよい。
• 「プロダクション」モードで運用中にJSPの変更頻度が高くない場合は60以上に設定
• 管理コンソールでは、Webアプリケーション管理画面の「コンフィグレーション」タブ画面で
設定
変更のチェック
クライアント
JSP
ファイル 変換
ソース
コンパイル
2回目以降
ロード
Servlet
WebLogic
Java
Java
クラス
Copyright© 2011, Oracle. All rights reserved.
18
JSP②
• JSPのプリコンパイルの指定
• Webアプリケーションのweblogic.xmlで下記を指定
• <jsp-descriptor> のprecompile とprecompile-continueにtrueを設定する
• デフォルトはfalse
• クライアントからアクセス時の変換、コンパイルのオーバーヘッドは排除できるが
WebLogicの起動時間やアプリのデプロイ時間は長くなる可能性がある
• 管理コンソールでは、Webアプリケーション管理画面の「コンフィグレーション」タブ画面で
設定
クライアント
WebLogic起動時やアプリの
再デプロイに変更分をコンパイル
JSP
Java
ファイル 変換
WebLogic
ソース
コンパイル
ロード
Servlet
Java
クラス
Copyright© 2011, Oracle. All rights reserved.
19
JSPの再変換と再コンパイルのチェック間隔
とプリコンパイルの指定例
• JSPの再変換と再コンパイルのチェック間隔を70秒に指定
• JSPのプリコンパイルを行うようにtrueに指定
weblogic.xml
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls=“省略">
<wls:weblogic-version>10.3.3</wls:weblogic-version>
<wls:context-root>Test</wls:context-root>
<wls:jsp-descriptor>
<wls:page-check-seconds>3</wls:page-check-seconds>
<wls:precompile>true</wls:precompile>
</wls:jsp-descriptor>
</wls:weblogic-web-app>
Copyright© 2011, Oracle. All rights reserved.
20
Fast Swap
• クラスのリロードチェック間隔の指定
• ヒープにロードされているインスタンスが常時最新になるようにク
ラスファイルをチェックする間隔
• Webアプリケーションのweblogic.xmlで下記を指定
• <fast-swap> に秒指定する
• WebLogicの動作モードが「開発」の場合のみ
クライアント
Servlet
WebLogic
クラス
ロード
変更のチェック
Servlet
Copyright© 2011, Oracle. All rights reserved.
21
リロード間隔の指定例
• チェック間隔を5秒に指定
weblogic.xml
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls=“省略">
<wls:weblogic-version>10.3.3</wls:weblogic-version>
<wls:context-root>Test</wls:context-root>
<wls:fast-swap>
<wls:enabled>true</wls:enabled>
<wls:refresh-interval>5</wls:refresh-interval>
</wls:fast-swap>
</wls:weblogic-web-app>
Copyright© 2011, Oracle. All rights reserved.
22
EJB①
• Stateless Session Beanのプールの指定
• Stateless Session Beanのインスタンスをプールに保持させる
• 1つのStateless Session Beanへの同時アクセス数を指定するのがのぞましい
• EJBアプリケーションのweblogic-ejb-jar.xmlで下記を指定
• <stateless-session-descriptor><pool>のmax-beans-in-free-pool に最大保
持可能数を、initial-beans-in-free-poolに初期保持可能数を指定(同じにして
おくのがよい)
• デフォルト値は1000
• Message Driven Beanも同様のパラメータでインスタンスをプールに保持指定可
能
• 指定要素は、<message-driven-descriptor>内の<pool>要素
Stateless
クライアント
WebLogic
Session Bean
Stateless
Web App
Session Bean
Stateless
Session Bean
Copyright© 2011, Oracle. All rights reserved.
23
EJB②
• Stateful Session Beanのメモリキャッシュの指定
• Stateful Session Beanのインスタンスをメモリに保持させる
• 1つのStateful Session Beanへの同時アクセス数を指定するのがのぞま
しい
• EJBアプリケーションのweblogic-ejb-jar.xmlで下記を指定
• <stateful-session-descriptor><stateful-session-cache>にmaxbeans-in-cache
• デフォルト値は1000
クライアント
Web App
Stateful
WebLogic
Session Bean
Stateful
Passivate
Session Bean
Stateful
Stateful
Session Bean
Session Bean
Disk
Copyright© 2011, Oracle. All rights reserved.
24
EJB③
• 引数の値渡し、参照渡しの指定
• WebLogic8.1以降のバージョンはデフォルトは値渡し
• EJBクライアントとEJBが同一アプリケーションの場合は、Localインターフェースの
EJBを使用するか、または明示的に参照渡しにすることでパフォーマンス向上が期
待できる
• ただし、使用するアプリケーションが値渡しを前提としたセマンティクスになって
いないことが要件となる。
• weblogic-ejb-jar.xmlの<weblogic-enterprise-bean> でenable-call-by-reference
でtrue指定すると参照渡しになる
値渡し
(call by value)
参照渡し
EJBの引数に
Objectのコピーを生成して渡す
EJB Client
EJB
Object
(call by reference)
EJB
Object
Copyright© 2011, Oracle. All rights reserved.
EJBの引数に
ObjectのReferenceを渡す
EJB Client
Object
25
<Insert Picture Here>
Java EEサービスのチューニング
- JDBC
- JTA
- JMS
Copyright© 2011, Oracle. All rights reserved.
26
接続プールの最適化
• アプリケーションの実行中に新しい接続の生成が発生し
ないように調整しておくことが望ましい
• 初期容量 = 最大容量
• 通常は実行スレッド数よりも多くの接続を使わないように
設定する
Copyright© 2011, Oracle. All rights reserved.
27
Statementキャッシュの利用
• JDBCデータソースの Statement キャッシュサイズで指定した個数に
到達するまで、WLSはアプリケーション・EJBで使われる
PreparedStatementオブジェクト、CallableStatementオブジェクトを
キャッシュし、次回から同じステートメントの実行時に再利用する
• キャッシュを再利用することでデータベースサーバ側のCPU使用率
が下がるため、CPUサイクルを他のタスクに割り当てることが可能と
なる
Copyright© 2011, Oracle. All rights reserved.
28
Pinned-To-Threadプロパティの利用
• データソースで [スレッドに固定] を有効化すると、アプリ
ケーションがデータベース接続の予約に要する時間を最
小化できる
• アプリケーションが接続をクローズしても、実行スレッドが接続オブ
ジェクトを保持し続ける(データソースには返却しない)
• 接続予約を試行する複数のスレッド間での競合を削減できる
Copyright© 2011, Oracle. All rights reserved.
29
トランザクションとパフォーマンス
• トランザクションのタイムアウト値はデフォルトでは30秒
• 通常のトランザクションは数秒の間にコミットかロールバックをする
• トランザクションの使用に対するアドバイス
• 性能を向上するためには、トランザクションの時間を短く保つこと
• 必要な場合のみトランザクションを使用するようにする
• 2フェーズコミットはできる限り発生しないようにするにする
Copyright© 2011, Oracle. All rights reserved.
30
JMS送り先のパフォーマンスオプション
• メッセージをバッチでコンシューマに送信することで、パフ
ォーマンスを調整することが出来る
• JMS送り先にはメッセージのバッチが作成されるまで送信を待機
し、コンシューマにまとめてメッセージを送信する機能が備わって
いる
• JMS送り先の【メッセージングパフォーマンスのチューニング】オプ
ションを使用する
• 複数まとめて送信するため、待ち時間が長くなるが、送出回数が
少なくなるため、サーバ全体のスループットが向上する
Copyright© 2011, Oracle. All rights reserved.
31
<Insert Picture Here>
WebLogic Serverのチューニング
- ワークマネージャ
- 過負荷管理
- パフォーマンスパック
Copyright© 2011, Oracle. All rights reserved.
32
WLS9.xより前のスレッド管理
• 手動でスレッドプールサイズを調整する必要があった
•
•
•
•
•
スレッド数
キューの長さ
しきい値
最大スレッド数
スレッドの優先順位
• 負荷の高い作業に対して複数の実行キューを使用
Copyright© 2011, Oracle. All rights reserved.
33
WLS9.xより前のスレッド管理
• 複数の実行キューと実行スレッドプール
• スレッドチューニングは手動
リクエスト
リッスンポート
Defaultキュー
実行キュー
マルチ
プレクサ
実行スレッドプール
実行スレッド
キュー
カスタムキュー
実行キュー
バックログ
リッスンスレッドにより
ソケットリーダ
運ばれる
スレッドにより
何らかの理由でリクエストが
処理できない場合のバッファ
運ばれる
実行スレッドプール
実行スレッド
内部管理キューにもスレッドプールが存在
Copyright© 2011, Oracle. All rights reserved.
34
ワークマネージャの利用
• WebLogic Server 9.x ではワークマネージャを使ってス
レッドの管理を行う
• 自動的にスレッド数が必要に応じて調整される
• アプリケーションの実行優先順位をコンフィグレーションする
• 管理者によるパラメタの定義
• 実行時メトリクス
• リクエストを実行するためにかかった実際の時間
• デフォルトワークマネージャ
• アプリケーションがユーザ定義のワークマネージャに割り当てられ
ていないときに使用される
• 全てのアプリケーションが同等の優先順位を持つ
• それぞれのアプリケーションのスレッド割り当てが均等に行われる
• "default" という名前のワークマネージャを定義することでデフォル
トワークマネージャの値をカスタマイズすることが出来る
Copyright© 2011, Oracle. All rights reserved.
35
WebLogic 9.x以降のスレッド管理イメージ
• 単一の実行スレッドプール。スレッドプール数は自動チューニング。
• ワークマネージャー(スレッド制御ポリシーをもったキュー)により、アプリケーションの実行優先制御が可能に
リクエスト
リッスンポート
ワークマネージャーサブシステム
実行スレッドプール
マルチ
プレクサ
実行スレッド
ワークマネージャー
アプリケーションA
バックログ
リッスンスレッドにより
ワークマネージャー
運ばれる
何らかの理由でリクエストが
ソケットリーダ
処理できない場合のバッファ
スレッドにより
アプリケーションB
アプリケーションC
運ばれる
Copyright© 2011, Oracle. All rights reserved.
36
ワークマネージャのスコープ
• デフォルトのワークマネージャ
• 多くの場合、ほとんどのアプリケーションの要求を満たす
• デフォルトの割り当てが不十分な場合、または応答時間の目標値が必要、
デッドロックの防止、最小スレッド数の保証が必要な場合、ワークマネー
ジャを作成し、コンフィグレーションする
• グローバルレベルまたはアプリケーションレベルでワークマネージャをコ
ンフィグレーションすることが出来る
• グローバルレベル
• ドメイン内のアプリケーションまたはアプリケーションコンポーネントで使
用可能
• 管理コンソールで定義することが可能
• アプリケーションレベル
• 指定されたアプリケーションで使用可能
• weblogic-application.xml, weblogic-ejb-jar.xml, weblogic.xmlで定義
Copyright© 2011, Oracle. All rights reserved.
37
グローバルレベルのワークマネージャの例
優先度を高く設定
優先度を低く設定
default
その他全ての
アプリケーション
ワークマネージャ
優先度の低い
優先度の高い
アプリケーションA
アプリケーションB
Copyright© 2011, Oracle. All rights reserved.
38
ワークマネージャコンポーネント
• 独自のワークマネージャを作成し、実行優先順位をコン
フィグレーションするために次のワークマネージャコンポ
ーネントを使用する
種類
要求事項
概要
Defaultワークマネージャー
制約
最大スレッド数制約
同時実行可能なスレッドの最大数を指定
-1(無制限)
最小スレッド数制約
実行用に最低限保証されるスレッド数を指定
0
容量制約
ワークマネージャーのキューに受け付けることができるリクエ
ストの最大数(超えた場合はHTTP 503を返す)
-1(無制限)
応答時間要求クラス
必要な応答時間(msec)の指定からスレッド使用時間の割合
(他の設定値との相対となる)を指定
設定なし
フェアシェア要求クラス
平均スレッド使用時間(他の設定値との相対となる)を指定
設定なし
コンテキスト要求クラス
ユーザやグループと、応答時間要求クラスやフェアシェア要
求クラスとを関連付ける
設定なし
要求クラス
Copyright© 2011, Oracle. All rights reserved.
39
要求クラス
• 要求クラスはリクエストのスレッドの割り当てに使用する
スケジュールガイドラインを表現する
• 応答時間要求クラス
• 応答時間の目標値(ミリ秒単位)
• フェアシェア要求クラス
• 要求の処理に必要な平均スレッド使用時間の相対値
• コンテキスト要求クラス
• 現在のユーザやグループなどのコンテキスト情報
• 指定されたコンテキスト情報に基づいて、要求クラスを選択
Copyright© 2011, Oracle. All rights reserved.
40
制約
• 制約
• 要求を実行するために割り当てられるスレッドの最小数と最大数
• WebLogic Server が要求を拒否するまでにキューに入る要求の
総数
• 最大スレッド数制約
• 要求を実行する同時スレッド数の制限
• デフォルト値は -1 (無制限)
• データソースを指定して、データソースのサイズを制約に使用する
ことも出来る
• 要求クラスによって設定されたフェアシェアや応答時間の達成を
妨げる可能性がある
Copyright© 2011, Oracle. All rights reserved.
41
制約
• 最小スレッド数制約
• 要求に割り当てられるスレッド数の保証
• デフォルト値は0
• 容量制約
• リクエスト数が指定した容量に達した場合に要求を拒否
• デフォルト値は -1 (無制限)
Copyright© 2011, Oracle. All rights reserved.
42
要求クラス設定例
• フェアシェア要求クラス
• アプリケーションAでフェアシェア要求クラス10を指定
• アプリケーションBでフェアシェア要求クラス20を指定
• アプリケーションCでフェアシェア要求クラス50を指定
• 上記の設定で、高負荷でリクエスト投入時、スレッドの割
当比率が下記のようになる。
• アプリケーションAのスレッドの割当比率は12.5% (10/80)
• アプリケーションBのスレッドの割当比率は25% (20/80)
• アプリケーションCのスレッドの割当比率は62.5% (50/80)
Copyright© 2011, Oracle. All rights reserved.
43
要求クラス設定例
• 応答時間要求クラス
• アプリケーションAで応答時間要求クラス2000msecを指定
• アプリケーションBで応答時間要求クラス5000msecを指定
• 設定した時間の相対比率をベースにするため、応答時間が必ず設定
通りにはならない
• 上記の設定で、高負荷でリクエスト投入時、アプリケーション実行時間
が一定の場合
• アプリケーションAは、Bに対して2対5になるようにスレッドを割当
• アプリケーションBは、Aに対して5対2になるようにスレッドを割当
Copyright© 2011, Oracle. All rights reserved.
44
ワークマネージャーの設定イメージ
• 制約や要求クラスを個別に定義する。
• ワークマネージャーを定義し、定義した制約や要求クラスを割当てる。
• ワークマネージャーをWebLogicサーバまたはアプリケーションに割当てる。
ワークマネージャー
WebLogic
サーバ
最大スレッド数制約
それぞれ
設定可能
最小スレッド数制約
容量制約
応答時間、
フェアシェア、
コンテキストの
アプリケーション
要求クラス
いずれかを設定
Copyright© 2011, Oracle. All rights reserved.
45
ワークマネージャの使用方法
• WebアプリケーションまたはEJBモジュールから定義済みのワークマ
ネージャを使用するためにはデプロイメント記述子を使用する
• Webアプリケーションの場合
• weblogic.xml の wl-dispatch-policy タグを使用する
<weblogic-web-app>
<wl-dispatch-policy>ワークマネージャ名</wl-dispatch-policy>
</weblogic-web-app>
• EJBモジュールの場合
• weblogic-ejb-jar.xml の dispatch-policy タグを使用する
<weblogic-enterprise-bean>
<dispatch-policy>ワークマネージャ名</dispatch-policy>
</weblogic-enterprise-bean>
Copyright© 2011, Oracle. All rights reserved.
46
実行キューの有効化
• ワークマネージャにはWebLogic Server 8.1 との下位互換性を有効
にするために実行キューを使用することが出来る
• 全てのワークマネージャのコンフィグレーションとスレッドの自動チュ
ーニングは無効となる
• WebLogic Server 8.1 の実行キューと全く同じように動作する
• 有効化されたワークマネージャが実行キューに変換されて動作する
• 最小スレッド数制約または最大スレッド数制約が実装されている場合、実
行キューはワークマネージャと同名で作成され、スレッド数も同じになる
• ワークマネージャで制約が適用されていない場合、デフォルト実行キュー
が使用される
・起動時のコマンドラインオプションの指定
-Dweblogic.Use81StyleExecuteQueues=true
Copyright© 2011, Oracle. All rights reserved.
47
過負荷保護機能
•
•
•
•
スレッドプール内の要求の制限
HTTPセッションの制限
メモリ不足例外のハンドリング
スタックスレッドのハンドリング
Copyright© 2011, Oracle. All rights reserved.
48
スレッドプール内の要求の制限
• キューの要求が最大数に達すると以下の要求が拒否さ
れる
• Webアプリケーション要求
• フェアシェアが低い処理
• キューの長さはデフォルトで65536
Copyright© 2011, Oracle. All rights reserved.
49
HTTPセッションの制限
• アクティブなHTTPセッションの制限を行うことが出来る
• 指定されたしきい値に達すると新たなセッションの作成要
求が拒否される
• クラスタの場合、SessionCreationException(実行時例外) が発
生する
• この例外を捕捉し、HTTPコード503による応答を行う
• デプロイメント記述子(weblogic.xml)で制限を記述する
<session-descriptor>
<max-in-memory-sessions>100</max-in-memory-sessions>
</session-descriptor>
Copyright© 2011, Oracle. All rights reserved.
50
メモリ不足例外、スタックスレッドの制御
• メモリ不足例外が発生した場合、サーバを自動的に停止するように設定可
能
• アプリケーションスレッドのスタック
• 全てのアプリケーションスレッドがスタックしたときにサーバを自動的に停止するこ
とが可能
• 設定したしきい値以上のスレッド数がスタックした場合にも保護機能が実行される
Copyright© 2011, Oracle. All rights reserved.
51
メモリ不足の検出
• 一定の時間間隔ごとに利用可能なメモリの残量をサンプ
リングすることで、WLSはメモリ不足を検出することがで
きる
サーバ-コンフィグレーション-オーバーロード
サーバ-コンフィグレーション-チューニング
Copyright© 2011, Oracle. All rights reserved.
52
パフォーマンスパックの使用
• サーバのパフォーマンスはソケットリーダスレッドに依存
する
• WebLogic Serverには2種類のソケットリーダがある
• ネイティブ—最高のパフォーマンスを提供する
• デフォルトで有効化されている
• ピュアJava—非効率的なソケットポーリングを利用せざるを得な
い
• 十分な数のソケットリーダースレッドを割り当てるように実行ス
レッド数を大きくする
Copyright© 2011, Oracle. All rights reserved.
53
パフォーマンスパックの設定
•「サーバ-コンフィグレーション」→「チューニング」
Copyright© 2011, Oracle. All rights reserved.
54
接続バックログ バッファの調整
• [バックログの受け入れ]属性を使って、TCP接続を待ちキ
ューにバッファリング可能な個数を指定する
•「サーバ-コンフィグレーション」→「チューニング」
Copyright© 2011, Oracle. All rights reserved.
55
<Insert Picture Here>
JVMのチューニング
- ヒープサイズの決定
- HotSpotのガベージ・コレクション
- JRockitのガベージ・コレクション
Copyright© 2011, Oracle. All rights reserved.
56
Java バーチャルマシンとヒープ
• Javaバーチャルマシン(JVM)のヒープは以下のものを含
む
• 現在使用されているオブジェクト
• 参照されていないオブジェクト
• 利用可能なフリーメモリ
• JVMはヒープ中のメモリが不足すると、ガベージコレクタ
によるメモリ解放処理(ガベージ・コレクション)が行なわ
れる
• その間、JVMの動作が停止
• JVM起動時に指定するヒープサイズに関するパラメータ設定を適
切に実施する必要がある
Copyright© 2011, Oracle. All rights reserved.
57
Javaヒープ/ネイティブ領域のサイジング
• Java ヒープ
• Java オブジェクトの割り当てられている領域
• 最大ヒープ サイズは、サーバの起動時に java コマンドの -Xmx オプションで
定義
• -Xmx -Xmsで指定、ヒープの拡張によるオーバーヘッドをなくすため 同じ値を
設定
–Xms と –Xmxをオプションでヒープ容量の上限と下限を指定する
java –Xms1024m –Xmx1024m weblogic.Server
• ネイティブ メモリ
• JVM で自身の内部操作に使用
• JNI コードやサード パーティ製のネイティブ モジュール (TYPE2 JDBC ドライ
バなど) でも使用
• 最大ネイティブ メモリ サイズは、次の要素で決定
• OSの仮想プロセス サイズの制限
• すでに Java ヒープに割り当てられているメモリの量
Copyright© 2011, Oracle. All rights reserved.
58
WebLogic管理コンソールによるモニタリング
Copyright© 2011, Oracle. All rights reserved.
59
ガベージ・コレクション
• 必要な空きメモリを確保するために、ガベージ・コレクションが行
われる
• Java は、明示的にオブジェクトを解放することが不可能である
• ガベージ・コレクション実行中は、CPUを長時間占有する場合が
ある
• アプリケーションスレッドは待機される
• 最新の Java 仮想マシンは、多数のガベージ・コレクション方式を
実装している
Copyright© 2011, Oracle. All rights reserved.
60
HotSpot
• HotSpot とは、Sun の Java 仮想マシンである
• HotSpot はWebLogic Serverを動作させるすべてのプラットフォ
ームで利用可能である
• HotSpotには、2つのJVMが存在する
• ClientVM:クライアント アプリケーション用に最適化されている(短
命、軽量スレッドの利用)
• ServerVM : サーバ アプリケーション用に最適化されている(長命、
高度なマルチスレッドの利用)
• HotSpot は様々なガベージ・コレクションのアルゴリズム
をサポートする
Copyright© 2011, Oracle. All rights reserved.
61
世代別ガベージ・コレクション
• 世代別 GC は、ヒープを世代 もしくは ゾーンに分類する
• 新しいオブジェクトは、頻繁にガベージ・コレクションされる領域に
作成される
• オブジェクトが、ガベージ コレクタ サイクルによってメモリから解放
されなかった場合、オブジェクトはより永続的な領域に移動される
Eden
Young
Survivor
Tenured
Copyright© 2011, Oracle. All rights reserved.
Permanent
62
ガベージ・コレクション
• HotSpot では、4つの世代別ガベージ コレクタを指定でき
る
•
•
•
•
デフォルト コレクタ
スループット コレクタ (–XX:+UseParalleleGC)
並行短停止時間 コレクタ (-XX:+UseConcMarkSweepGC )
インクリメンタル 短停止時間 コレクタ (-Xincgc)
Copyright© 2011, Oracle. All rights reserved.
63
ガベージ・コレクション方式の選択
• ガベージ・コレクションの方式は求める要件にあわせて決
定する
• レスポンス重視
• スループット重視
レスポンス重視
スループット重視
Young
インクリメンタル短停止
コレクタ
スループットコレクタ
Tenured
並行短停止コレクタ
デフォルトコレクタ
Copyright© 2011, Oracle. All rights reserved.
64
ガベージ・コレクションのモニタリング
• ガベージ・コレクションの状況を出力するには、JVMオプ
ションとして 「-verbose:gc」を指定する
Copyright© 2011, Oracle. All rights reserved.
65
jconsoleを使ったJVMの監視
• jconsole は J2SE付属のJMX に準拠した監視ツール
• jconsole は提供されている主な機能
•
•
•
•
•
•
概要タブ : JVM および監視される値の概要情報の表示
メモリタブ : メモリ使用率に関する情報の表示
スレッドタブ : スレッド使用率に関する情報の表示
クラスタブ : クラスのロードに関する情報の表示
MBeanタブ : MBean に関する情報の表示
VMタブ : JVMに関する情報の表示
Copyright© 2011, Oracle. All rights reserved.
66
jconsoleの起動方法
• ローカルでの監視の実行
• 起動時のパラメタに –Dcom.sun.management.jmxremote を追加して、
WebLogic Server を起動する
• %JAVA_HOME%/bin/jconsole.exe を起動する
• jconsole の接続ダイアログ-ローカルから監視するプロセスを選択
• リモートでの監視の実行
• 起動時のパラメタに –Dcom.sun.management.jmxremote.port を追加して、
ポート番号を指定して、WebLogic Server を起動する
• %JAVA_HOME%/bin/jconsole.exe を起動する
• jconsole の接続ダイアログ-リモートから監視するホスト名、サーバ名、ユ
ーザID、パスワードを指定する
Copyright© 2011, Oracle. All rights reserved.
67
JRockitチューニングのポイント
• GCは常に行うという前提で、GCによる処理停止
の影響を抑えるよう設計されている。
• チューニングのポイント
• GCモードの選択
• ヒープのサイジング
Copyright© 2011, Oracle. All rights reserved.
68
GCモードの選択
動的GC
静的GC
動作状況の変化に柔軟に対応
動作が固定なのでチューニングが簡
単
判定切り替えコストが掛からない
シングルスペースGC
世代別GC
オブジェクトの移動コストが低い
毎回プロモーションが発生
オブジェクト寿命の変化に強い
短寿命オブジェクトが多い場合に高速
コンカレントGC
パラレルGC
停止時間が理論上最小になる
理論上最も効率的にGCを実行する
Copyright© 2011, Oracle. All rights reserved.
69
ヒープのサイジング
• 最大/最小ヒープ値(-Xmx<size> -Xms<size>)
• ヒープの拡張によるオーバーヘッドをなくすため同じ値を設定
• 大きなサイズを指定がBetter、しかしGCに取られる時間は増加
• Long Lived Objectsのサイズの3倍程度がベストプラクティス
Heap Size
New GC
Old GC
Long Lived Objects Size
Copyright© 2011, Oracle. All rights reserved.
70
OTNセミナー オンデマンド コンテンツ
ダイセミで実施された技術コンテンツを動画で配信中!!
ダイセミのライブ感はそのままに、お好きな時間で受講頂けます。
最新情報つぶやき中
OracleMiddle_jp
・セミナ情報
・お勧め情報
・公開予告 など
OTN オンデマンド
※掲載のコンテンツ内容は予告なく変更になる可能性があります。
期間限定での配信コンテンツも含まれております。お早めにダウンロード頂くことをお勧めいたします。
Copyright© 2011, Oracle. All rights reserved.
72
Oracle エンジニアのための技術情報サイト
オラクルエンジニア通信
http://blogs.oracle.com/oracle4engineer/
最新情報つぶやき中
oracletechnetjp
• 技術資料
• ダイセミの過去資料や製品ホワイト
ペーパー、スキルアップ資料などを
多様な方法で検索できます
• キーワード検索、レベル別、カテゴ
リ別、製品・機能別
• コラム
• オラクル製品に関する技術コラムを
毎週お届けします
• 決してニッチではなく、誰もが明日
から使える技術の「あ、そうだったん
だ!」をお届けします
オラクルエンジニア通信
こんな資料が人気です
 6か月ぶりに資料ダウンロードランキングの首位が交代!
新王者はOracle Database構築資料でした。
 データベースの性能管理手法について、Statspack派も
Enterprise Manager派も目からウロコの技術特集公開中
Copyright© 2011, Oracle. All rights reserved.
73
OTN×ダイセミ でスキルアップ!!
・一般的な技術問題解決方法などを知りたい!
・セミナ資料など技術コンテンツがほしい!
Oracle Technology Network(OTN)を御活用下さい。
http://forums.oracle.com/forums/main.jspa?categoryID=484
一般的技術問題解決にはOTN掲示版の
「ミドルウェア」をご活用ください
※OTN掲示版は、基本的にOracleユーザー有志からの回答となるため100%回答があるとは限りません。
ただ、過去の履歴を見ると、質問の大多数に関してなんらかの回答が書き込まれております。
http://www.oracle.com/technetwork/jp/testcontent/index-086873-ja.html
過去のセミナ資料、動画コンテンツはOTNの
「OTNセミナー オンデマンド コンテンツ」へ
※ダイセミ事務局にダイセミ資料を請求頂いても、お受けできない可能性がございますので予めご了承ください。
ダイセミ資料はOTNコンテンツ オン デマンドか、セミナ実施時間内にダウンロード頂くようお願い致します。
Copyright© 2011, Oracle. All rights reserved.
74
ITプロジェクト全般に渡る無償支援サービス
Oracle Direct Conciergeサービス
■パフォーマンス診断サービス
■システム構成診断サービス
•Webシステム ボトルネック診断サービス NEW
•データベースパフォーマンス 診断サービス
•Oracle Database構成相談サービス
•サーバー統合支援サービス
•仮想化アセスメントサービス
•メインフレーム資産活用相談サービス
•BI EEアセスメントサービス
•簡易業務診断サービス
■移行支援サービス
•SQL Serverからの移行支援サービス
•DB2からの移行支援サービス
•Sybaseからの移行支援サービス
•MySQLからの移行支援サービス
•Postgre SQLからの移行支援サービス
•Accessからの移行支援サービス
•Oracle Application ServerからWeblogicへ
移行支援サービス NEW
■バージョンアップ支援サービス
•Oracle Databaseバージョンアップ支援サービス
•Weblogic Serverバージョンアップ支援サービス NEW
•Oracle Developer/2000(Froms/Reports)
Webアップグレード相談サービス
オラクル社のエンジニアが 直接ご支援します
お気軽にご活用ください!
オラクル 無償支援
Copyright© 2011, Oracle. All rights reserved.
検索
75
1日5組限定!
製品無償評価サービス
提供シナリオ一例
・データベースチューニング
・アプリケーション性能・負荷検証
・無停止アップグレード
・Webシステム障害解析
インストールすることなく、すぐに体験いただけます
• サービスご提供までの流れ
1.
2.
3.
お問合せフォームより「製品評価サービス希望」と必要事項を明記し送信下さい
弊社より接続方法手順書およびハンズオン手順書を送付致します
当日は、弊社サーバー環境でインターネット越しに製品を体感頂けます
※サービスご提供には事前予約が必要です
Web問い合わせフォーム
「ダイデモ」をキーワードに検索することで申し込みホームページにアクセスできます
http://www.oracle.com/jp/direct/services/didemo-195748-ja.html
Copyright© 2011, Oracle. All rights reserved.
76
あなたにいちばん近いオラクル
Oracle Direct
まずはお問合せください
Oracle Direct
検索
システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。
システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。
フリーダイヤル
Web問い合わせフォーム
専用お問い合わせフォームにてご相談内容を承ります。
http://www.oracle.com/jp/direct/inquiry-form-182185-ja.html
※こちらから詳細確認のお電話を差し上げる場合がありますので、ご登録さ
れている連絡先が最新のものになっているか、ご確認下さい。
0120-155-096
※月曜~金曜 9:00~12:00、13:00~18:00
Copyright© 2011, Oracle. All rights reserved.
(祝日および年末年始除く)
Copyright© 2011, Oracle. All rights reserved.
Copyright© 2011, Oracle. All rights reserved.
79
Fly UP