View
14.170
Download
2
Embed Size (px)
DESCRIPTION
第二回 WebLogic Server 勉強会資料
Citation preview
<Insert Picture Here>
WebLogic Server の TIPS最近の事例から - CASE STUDY
日本オラクル(株) カスタマーサービス統括本部テクニカルアナリスト 石塚 崇浩2009年5月21日
Copyright© 2009, Oracle. All rights reserved. 2
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
Oracle、PeopleSoft、JD Edwards、及びSiebelは、米国オラクル・コーポレーション及びその子会社、関連会社の登録商標です。その他の名称はそれぞれの会社の商標の可能性があります。
Copyright© 2009, Oracle. All rights reserved. 3
• WebLogic Server の事例• クラスタ環境 - サーバ再起動時の注意点
• Linux 環境固有 - メモリリーク既知問題
• JDBC 関連の事例• 「非アクティブ接続タイムアウト」の活用法
• Oracle RAC と組み合わせる際のポイント
• 高速接続フェイルオーバ利用時のポイント
• JRockit の事例• JRockit でのエンコード指定について
• トラブルシューティング関連 お役立ち情報
Agenda
Copyright© 2009, Oracle. All rights reserved. 4
• WebLogic Server の事例• クラスタ環境 - サーバ再起動時の注意点
• Linux 環境固有 - メモリリーク既知問題
• JDBC 関連の事例• 「非アクティブ接続タイムアウト」の活用法
• Oracle RAC と組み合わせる際のポイント
• 高速接続フェイルオーバ利用時のポイント
• JRockit の事例• JRockit でのエンコード指定について
• トラブルシューティング関連 お役立ち情報
Agenda
Copyright© 2009, Oracle. All rights reserved. 5
クラスタ環境 - サーバ再起動時の注意点
• 質問• 「インメモリレプリケーション」 を使用しているクラスタ環境で、メンテンスの為、各サーバの順次再起動が必要です。サーバー再起動の間隔は 「できるだけ短時間」 としたいのですが、 「アプリケーションは中断させたくありません」 。どのように行えばよいでしょうか?
• 回答• 最長の「セッションタイムアウト時間」を間隔として、順次再起動して下さい。
Copyright© 2009, Oracle. All rights reserved. 6
インメモリレプリケーションの特徴
serverB
HttpSession
クラスタ
• クライアントからのアクセス時• HttpSessionオブジェクトを2つのサーバー上に生成
クライアント
serverA
HttpSession
Copyright© 2009, Oracle. All rights reserved. 7
サーバー再起動後の状態
serverB
HttpSession
クラスタ
• serverA を再起動すると、残るオブジェクトは1つ・・
• このままでは、serverB の再起動はできない
クライアント アプリケーションを中断したくない!!
serverA
早く再起動したい
再起動
Copyright© 2009, Oracle. All rights reserved. 8
アプリケーションを中断しない為には?
serverB
HttpSession
クラスタ
• serverAへのレプリケーションが必要• クライアントからのアクセスが必要
• いつアクセスされるかは予測不能
• セッションが失効した後は待つ必要はない
クライアント
serverA
HttpSession タイムアウト
コピー
Copyright© 2009, Oracle. All rights reserved. 9
どのくらい待てばよいのか?
serverBクラスタ
• 一番最後に失効するオブジェクトを待てばよい• 最も遅いアクセスは? → serverA再起動の直前
• これにタイムアウト時間を加えた時刻が最後の失効
• 「serverA再起動」 + 「タイムアウト時間」で再起動可能
serverA
タイムアウト
クライアント
Copyright© 2009, Oracle. All rights reserved. 10
まとめ
• 「インメモリレプリケーション」 の場合• 再起動の間隔は、「最長セッションタイムアウト」の時間を確保
• 「JDBC」 の場合• 再起動のタイミングは考慮しなくてよい
• セッション情報はメモリ以外の場所にある為
Copyright© 2009, Oracle. All rights reserved. 11
Linux 環境固有 - メモリリーク既知問題
• 事象• Linux 環境の WebLogic Server 10.0 で OutOfMemoryError が発生しました。JRockit の診断コマンドで確認するとSocket 関連のオブジェクトが増加しており、GC 後も開放されていないようです。
• 回答• 既知問題「CR346335」 に該当するかもしれません。問題の切り分けと、修正パッチの適用をご検討下さい。
Copyright© 2009, Oracle. All rights reserved. 12
発生条件と原因
• 発生条件• WebLogic Server のタイムアウト(CompleteMessageTimeout)などで、ソケットのI/O がキャンセルされると発生
• 原因• CR346335の既知問題
• Linux固有のマルチプレクサである「EpollSocketMuxer」のバグ
• マルチプレクサとは
• クライアントと WebLogic Server 間でソケット通信を効率よく行うための制御機能
Copyright© 2009, Oracle. All rights reserved. 13
対処法1/2
• 1. パッチ適用、もしくはアップグレード
• 該当バージョン
• WebLogic Server 9.2 GA, MP1
• WebLogic Server 10.0 GA, MP1
• 修正済みバージョン
• WebLogic Server 9.2MP3, WebLogic Server 10.3
• WebLogic Server 9.2MP2 では発生しない
• 別の修正が加えられている為
Copyright© 2009, Oracle. All rights reserved. 14
対処法2/2
• 2. マルチプレクサの切り替え
• Javaコマンド引数に以下を指定
• -Dweblogic.MuxerClass=weblogic.socket.PosixSocketMuxer
• 変更反映はスレッドダンプで確認可能
Copyright© 2009, Oracle. All rights reserved. 15
1. EpollSocketMuxer を使用しているか?
• スレッドダンプの取得で確認可能
• kill -3 <pid>
切り分け方法1/2
"ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" id=24 idx=0x30tid=8375 prio=5 alive, in native, blocked, daemon
:
at weblogic/socket/EPollSocketMuxer.processSockets()
V(EPollSocket Muxer.java:153)
:
出力例
Copyright© 2009, Oracle. All rights reserved. 16
2. JRockit診断コマンド
• 下記コマンドを定期的に取得
• jrcmd <pid> print_object_summary
--------- Detailed Heap Statistics: ---------:
0.9% 331k 14145 -4k java/util/ArrayList0.8% 294k 12556 +0k java/lang/ref/WeakReference0.7% 277k 3197 +0k [Ljava/util/Hashtable$Entry;0.7% 274k 11723 +0k javax/xml/namespace/QName0.7% 256k 1729 +8k weblogic/servlet/internal/ServletRequestImpl
0.7% 256k 1823 +7k weblogic/servlet/internal/MuxableSocketHTTP:
37487kB total ---
出力例
切り分け方法2/2
Copyright© 2009, Oracle. All rights reserved. 17
まとめ
• Linux 環境の WebLogic Server にはバージョンによってCR346335の既知問題が内在
• 対処法はパッチの適用、もしくはアップグレード
• 他のマルチプレクサへの切り替えなどで切り分けが可能
• 他のプラットフォームでは発生しない
Copyright© 2009, Oracle. All rights reserved. 18
• WebLogic Server の事例• クラスタ環境 - サーバ再起動時の注意点
• Linux 環境固有 - メモリリーク既知問題
• JDBC 関連の事例• 「非アクティブ接続タイムアウト」の活用法
• Oracle RAC と組み合わせる際のポイント
• 高速接続フェイルオーバ利用時のポイント
• JRockit の事例• JRockit でのエンコード指定について
• トラブルシューティング関連 お役立ち情報
Agenda
Copyright© 2009, Oracle. All rights reserved. 19
「非アクティブ接続タイムアウト」の活用法
• 質問• JDBC データソースの 「現在アクティブな接続の数」が増えていき、最終的には 「接続の最大容量」 に達して接続できなくなります。接続のクローズ漏れを疑っていますが、アプリケーションのデバッグに活用できる WebLogicServer の機能はないでしょうか?
• 回答• 「非アクティブ接続タイムアウト」の機能をご活用ください。
Copyright© 2009, Oracle. All rights reserved. 20
• 管理コンソールからの設定例• 動的な変更が可能
サービス>JDBC>データソース>コンフィグレーション>接続プール>詳
細>「非アクティブ接続タイムアウト」
設定箇所
Copyright© 2009, Oracle. All rights reserved. 21
機能紹介
• 1. 接続を自動的にプールに戻す
• 一定時間 close されていない (プールに戻されていない)接続を自動的にプールに戻す機能
• 秒単位で指定• デフォルト値は「0」となっており無効
• 注意点• リークなのか本当に使用中なのかは考慮されない
Copyright© 2009, Oracle. All rights reserved. 22
<2009/05/18 1時25分37秒 JST> <Warning> <JDBC> <BEA-001153> <Forcibly releasing inactive connection“weblogic.jdbc.wrapper.PoolConnection_oracle_jdbc_driver_T4CConnection@49” back into the connection pool “ds1”,currently reserved by: java.lang.Exception
at weblogic.jdbc.common.internal.ConnectionEnv.setup(ConnectionEnv.java:291)at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:314)at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:292)at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:425)at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:316)at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:93)at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:106)at weblogic.jdbc.pool.Driver.connect(Driver.java:149)at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:642)at weblogic.jdbc.jts.Driver.connect(Driver.java:124)at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:339)at test.caseStudy0521.dbaccess.getConnection(dbaccess.java:22)at test.caseStudy0521.dsLeakTest.doGet(dsLeakTest.java:16)at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
:
.>
• 2. プールに戻す際にスタックトレースを出力• アプリケーションの問題箇所の特定に有効
機能紹介
at test.caseStudy0521.dbaccess.getConnection(dbaccess.java:22)at test.caseStudy0521.dsLeakTest.doGet(dsLeakTest.java:16)
Copyright© 2009, Oracle. All rights reserved. 23
まとめ
• 「非アクティブ接続タイムアウト」は接続リークの解消に活用可能
• スタックトレース出力を活用して、アプリケーションを修正
Copyright© 2009, Oracle. All rights reserved. 2424
Oracle RAC と組み合わせる際のポイント
• 質問• WebLogic Server と Oracle RAC を組み合わせる場合のポイントや注意点を教えてください。
• 回答• マルチデータソースを通して利用します。
• 詳しい内容はマニュアルを参照、、、
「WebLogic Server での Oracle RAC の使い方」http://otndnld.oracle.co.jp/document/products/wls/docs103/jdbc_admin/oracle_rac.html
• ですが、ここでポイントを抜粋して説明します!!
Copyright© 2009, Oracle. All rights reserved. 25
サポート対象となる構成- WebLoigc Server 10gR3 の場合
• Oracle Database• 10gR2 (10.2.0.1 および以降の 10.2.x 向けパッチセット)
• 11gR1 (11.1.0.6.0 および以降の 11.1.x 向けパッチセット)
• Oracle 11g Thin Driver• 最新のパッチバージョンを推奨
• Oracle OCI Driver, BEA WebLogic Type4 Driver 等は非サポート
• 最新情報はこちらで確認(バージョンによって異なります)http://e-docs.bea.com/platform/suppconfigs/configs103/103_over/supported_db.html
25
Copyright© 2009, Oracle. All rights reserved. 26
• フェイルオーバー&ロードバランスをマルチデータソースが提供
• XA/非 XA どちらでも利用可能
基本構成は「マルチデータソース」
26
RACNode1
RACNode2
マルチデータソース
WebLogic Server
アプリケーション
フェイル
オーバー
&
ロード
バランス
DataSource 1
DataSource 2
Copyright© 2009, Oracle. All rights reserved. 27
各データソースの必須設定 - 抜粋
• 「予約時に接続をテスト」を有効化• TestConnectionsOnReserve = "true“
• TestTableName = “テスト用 SQL”
• RAC ノード が使用可能かのテストに必須
• XA ドライバの場合は下記も必要• 「トランザクション完了までXA接続を保持」
• KeepXAConnTillTxComplete = "true“
• 「XA 再試行期間」
• XARetryDurationSeconds > 300秒 + トランザクションタイムアウト
• JDBC ドライバの FAILOVER, LOAD_BALANCE は off に設定
• 全てのデータソースで同じ設定を実施
27
Copyright© 2009, Oracle. All rights reserved. 28
「マルチデータソース」以外の選択肢
• JDBC ドライバの「接続時フェイルオーバー」の活用• (FAILOVER = on) (LOAD_BALANCE = off)
• ドライバに閉じた機能であり WebLogic Server は関与しない
• XA(グローバルトランザクション) では利用不可
• Oracle 11g RAC の新機能「XA のロードバランス」は、WebLogic Server 10gR3 ではサポートされません。
• いかなる要件の場合も「マルチデータソース」が推奨構成
28
Copyright© 2009, Oracle. All rights reserved. 29
まとめ
• サポート対象のデータベースとドライバは限定されている• Oracle RAC 10g/11g
• Oracle 11g Thin Driver
• 「マルチデータソース」が提供するフェイルオーバー、ロードバランスの利用を推奨
29
Copyright© 2009, Oracle. All rights reserved. 30
高速接続フェイルオーバ利用時のポイント
• 質問• WebLogic Server 10.3で「高速接続フェイルオーバ」を利用したいと考えています。 WebLogic Server で必要となる設定と注意点がありましたら教えてください。
• 回答• データソースのプロパティ(後述)を設定することで WebLogic Serverでも FCF を活用できます。
• ここでは、ポイントを紹介させて頂きます。
Copyright© 2009, Oracle. All rights reserved. 31
高速接続フェイルオーバとは?
• Fast Connection Failover ( FCF )
• Oracle Thin ドライバが提供する「 RAC イベント検知の仕組み」
• 「アプリケーションに依存しない」ので高速な障害検知が可能
Copyright© 2009, Oracle. All rights reserved. 32
必要な設定
1. ドライバ クラス名を oracle.jdbc.pool.OracleDataSource に設定
• プール対応のデータソースを使用する
2. 「接続プール プロパティ」の追加• ONSConfiguration=nodes=hostname1:port1,hostname2:port2
• このプロパティの設定で他のプロパティも自動的に設定される
3. 「予約時に接続をテスト」にチェック• 管理コンソールから設定。RACノードが使用可能かのテストに必須
4. 「アイドルプール接続を信頼する秒数」の無効化• 管理コンソールから設定。デフォルトは10秒で有効な状態
• 0秒に設定し「無効」にする
Copyright© 2009, Oracle. All rights reserved. 33
動作確認方法
• DBノードの切り替わり後の出力• 「SQLException, ORA-17008: クローズされた接続です」が
出力されることを確認できればOK
• 参考• Oracle Database JDBC開発者ガイドおよびリファレンス
10g リリース2(10.2) 27 高速接続フェイルオーバー
• アプリケーションによる認識http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/fstconfo.htm#CEGIJDBE
Copyright© 2009, Oracle. All rights reserved. 34
まとめ
• FCF は Oracle Thin ドライバの機能です
• WebLogic Server でもプロパティを渡すことで利用可能
• 現状、使用可能なバージョンは WebLogic Server 10.3のみ
• 参考
• 「KROWN:133779」• Oracle Technology Network(OTN) KROWN検索http://otn.oracle.co.jp/support/productfaq/index.html
Copyright© 2009, Oracle. All rights reserved. 35
• WebLogic Server の事例• クラスタ環境 - サーバ再起動時の注意点
• Linux 環境固有 - メモリリーク既知問題
• JDBC 関連の事例• 「非アクティブ接続タイムアウト」の活用法
• Oracle RAC と組み合わせる際のポイント
• 高速接続フェイルオーバ利用時のポイント
• JRockit の事例• JRockit でのエンコード指定について
• トラブルシューティング関連 お役立ち情報
Agenda
Copyright© 2009, Oracle. All rights reserved. 36
JRockit でのエンコード指定について
• 質問• R26.3.0 で使用可能であった「-Dfile.encoding」が R27.1 以降のJRockit で有効になりません。 これは製品の不具合でしょうか?
• 回答• いいえ、file.encoding は本来「 Read Only 」のプロパティです。OS のデフォルトエンコーディングの設定を利用してください。
Copyright© 2009, Oracle. All rights reserved. 37
file.encoding は「 Read Only 」のプロパティ
• Sun Java にて 「Read Only」 との判断
• JRockit でも R27.1 以降で準拠(Read Only に変更)
• 参考• Sun Developer NetWork - Bug Database
• http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4163515
• http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4397522
Copyright© 2009, Oracle. All rights reserved. 38
OS のデフォルトエンコーディング指定方法
• Windows の場合• [コントロール パネル|地域 (または地域のオプション)] から言語を選択
• UNIX の場合• LANG 環境変数を設定
• 参考• 「WebLogic Server コンテナのデフォルトのエンコーディングの指定方法」
• http://otndnld.oracle.co.jp/document/products/wls/docs103/ja/relnotes_ja.html#1110200
Copyright© 2009, Oracle. All rights reserved. 39
まとめ
• エンコーディングの指定は、OSのデフォルトエンコーディングを使用する
• そもそも、デフォルト エンコーディングに頼らず、アプリケーション内で明示することが好ましい。(ポータビリティの確保)
Copyright© 2009, Oracle. All rights reserved. 40
Q&A
Copyright© 2009, Oracle. All rights reserved. 41
• WebLogic Server の事例• クラスタ環境 - サーバ再起動時の注意点
• Linux 環境固有 - メモリリーク既知問題
• JDBC 関連の事例• 「非アクティブ接続タイムアウト」の活用法
• Oracle RAC と組み合わせる際のポイント
• 高速接続フェイルオーバ利用時のポイント
• JRockit の事例• JRockit でのエンコード指定について
• トラブルシューティング関連 お役立ち情報
Agenda
Copyright© 2009, Oracle. All rights reserved. 42
トラブルシューティング関連 お役立ち情報
• BEA サポートパターン• 典型的なトラブルのパターン別に、調査方法や対処方法をまとめたカタログ
• 現場でのトラブルシューティングに活用してください!
• http://support.oracle.co.jp/bea/support_patterns-ja/index.html
• 「BEA WebLogic 製品のトラブルシューティング手法」• WebLogic Trouble Shooting Methodology (TSM)
• Oracle University で提供する教育コース(2日間)
• 代表的な「サポートパターン」のトラブルシューティング手法を実習を通して習得
• http://education.oracle.com/
• 次回は 7/27 に開催
Copyright© 2009, Oracle. All rights reserved. 43