• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
WebLogic Server のアーキテクチャ(スレッド管理)
 

WebLogic Server のアーキテクチャ(スレッド管理)

on

  • 26,815 views

第一回 WebLogic Server 勉強会資料

第一回 WebLogic Server 勉強会資料

Statistics

Views

Total Views
26,815
Views on SlideShare
26,687
Embed Views
128

Actions

Likes
4
Downloads
292
Comments
0

4 Embeds 128

http://www.slideshare.net 122
http://s.deeeki.com 3
http://b.hatena.ne.jp 2
http://www.health.medicbd.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    WebLogic Server のアーキテクチャ(スレッド管理) WebLogic Server のアーキテクチャ(スレッド管理) Presentation Transcript

    • <Insert Picture Here> WebLogic Server のアーキテクチャ(スレッド管理) 日本オラクル株式会社 カスタマーサービス統括本部 テクニカルアナリスト 大類 和久 2009年 4月14日
    • 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。ま た、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはでき ません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約 )するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラ クル製品に関して記載されている機能の開発、リリースおよび時期については、弊社 の裁量により決定されます。 Oracle、PeopleSoft、JD Edwards、及びSiebelは、米国オラクル・コーポレーション及びその子会社、関連会社の登録商 標です。その他の名称はそれぞれの会社の商標の可能性があります。 Copyright© 2009, Oracle. All rights reserved. 2
    • Agenda • アプリケーションサーバにおけるスレッド管理の必要性 • WebLogic Server 10.3 のスレッド管理のアーキテクチャ • コンフィグレーション • TIPS Copyright© 2009, Oracle. All rights reserved. 3
    • アプリケーションサーバにおけるスレッド管理の必要性 • 多数のクライアントからのリクエストを処理する必要がある • 多重、同時でリクエストを処理する必要がある • マルチスレッドで複数のリクエストを処理するのが最適 クライアント アプリケーションサーバ スレッド キュー ・ ・ ・ Copyright© 2009, Oracle. All rights reserved. 4
    • アプリケーションサーバにおけるスレッド管理の必要性 • WebLgoic Server 8.1 以前のアーキテクチャ アプリケーション クライアント スレッドプール WebApp A 実行キュー EJB A WebApp B ソケットリーダー Copyright© 2009, Oracle. All rights reserved. 5
    • WebLogic Server 10.3 のスレッド管理のアーキテクチャ - 新たなアーキテクチャの必要性 • WebLgoic Server 8.1 以前のアーキテクチャの課題 • スレッド数の調整が難しい • アプリケーションで必要なスレッド数を正確に決定するのは困難 • 多くし過ぎるとスレッド作成で起動が遅くなり、少ないと高負荷時の同時実行性 が下がるというジレンマ • スレッドは高価なリソースのため、少ないスレッドを効率的に使用したい • アプリケーション毎のプライオリティ付けが困難 • スレッドプール毎にスレッドのプライオリティを設定可能だが、OS レベルの設定 のため大袈裟 • 新たなアーキテクチャが必要 Copyright© 2009, Oracle. All rights reserved. 6
    • WebLogic Server 10.3 のスレッド管理のアーキテクチャ - 新たなアーキテクチャ • 単一の自動チューニングスレッドプールの導入 • 1 つのスレッドプールを複数のアプリケーションが利用する • スループットの測定に基づいて、自動でスレッド数が調整される • 初期のスレッド数は少ないため、起動時間に影響を及ぼさない • ワークマネージャの導入 • アプリケーション毎、ユーザ毎等の細かいプライオリティ付けが可能 • このアーキテクチャは WebLogic Server 9.0 から導入 Copyright© 2009, Oracle. All rights reserved. 7
    • WebLogic Server 10.3 のスレッド管理のアーキテクチャ - 概要図 ワークマネージャサブシステム クライアント Default ワークマネージャ WebApp A ワークマネージャ A WebApp B ワークマネージャ B EJB A ワークマネージャ C コンソール ソケットリーダー スレッドプール Copyright© 2009, Oracle. All rights reserved. 8
    • WebLogic Server 10.3 のスレッド管理のアーキテクチャ - スレッドの増減 2秒間隔でスループットの監視 スレッドが必要 スレッドが不要 ワークマネージャ A ワークマネージャ B スレッドプール Active Thread Standby Thread Copyright© 2009, Oracle. All rights reserved. 9
    • WebLogic Server 10.3 のスレッド管理のアーキテクチャ - リクエストのプライオリティ付け リクエストのプライオリティで順序を変更 ワークマネージャ A A A B ワークマネージャ B B スレッドプール Copyright© 2009, Oracle. All rights reserved. 10
    • コンフィグレーション - 種類 • 制約 • 最小スレッド数制約 • 最大スレッド数制約 • 容量制約 • 要求クラス • フェアシェア要求クラス • 応答時間要求クラス • コンテキスト要求クラス Copyright© 2009, Oracle. All rights reserved. 11
    • コンフィグレーション - 最小スレッド数制約 • 最小スレッド数制約 ワークマネージャ A MinThreadConstraint = 3 スレッドプール • 最小の並列実行数を制御 • プールにスレッドが存在するかに関わらず、スレッドを作成してでも 実行 • 起動時に作成されるスレッド数とは関係しない • 主な目的はデッドロックの防止 Copyright© 2009, Oracle. All rights reserved. 12
    • コンフィグレーション - 最大スレッド数制約 • 最大スレッド数制約 ワークマネージャ A 実行中 MaxThreadConstraint = 3 スレッドプール • 最大の並列実行数を制御 • 複数のワークマネージャより共有することが可能 • 合計のスレッド総数が制約の対象となる Copyright© 2009, Oracle. All rights reserved. 13
    • コンフィグレーション - 容量制約 • 容量制約 ワークマネージャ A 実行中 Capacity = 6 スレッドプール • キューに溜まるリクエストと実行中のリクエストの総数の最大数 • オーバーロードの防止 Copyright© 2009, Oracle. All rights reserved. 14
    • コンフィグレーション - 要求クラス • 要求クラスとは? • リクエストの重みを決定するもの • 空きスレッドが無い状態での、スレッドの割り当て時に作用 Copyright© 2009, Oracle. All rights reserved. 15
    • コンフィグレーション - 要求クラス • フェアシェア要求クラス • 相対的なプライオリティを設定する • 例) 100 • 応答時間要求クラス • 目標とする応答時間を設定する • 例) 2000 msec • 待ちキューに滞留する時間をコントロール • あくまで目標値の設定 • コンテキスト要求クラス • ユーザ毎に要求クラスを決定する • 要求クラスのネストを作成 Copyright© 2009, Oracle. All rights reserved. 16
    • コンフィグレーション - 要求クラス 例 • 例1 • ワークマネージャ A (フェアシェア 100) • ワークマネージャ B (フェアシェア 200) • 高負荷でリクエストを投入 • 1:2 の割合でスレッドが割り当てられる • 例2 • ワークマネージャ C (応答時間 2000ms) • ワークマネージャ D (応答時間 1000ms) • 高負荷でリクエストを投入し、アプリケーション実行時間が一定と仮 定する • 1:2 の割合でスレッドが割り当てられる Copyright© 2009, Oracle. All rights reserved. 17
    • コンフィグレーション - 要求クラス 例 • 例3 • フェアシェア要求クラスをネストしたコンテキスト要求クラス • ユーザ : system は 100 を設定したフェアシェア要求クラスを 使用 • 他のユーザ : everyone は 50 を設定したフェアシェア要求クラ スを使用 • ユーザ : system のリクエストは他のユーザより高い優先度でス レッドが割り当てられる Copyright© 2009, Oracle. All rights reserved. 18
    • コンフィグレーション - ワークマネージャの定義 • グローバルワークマネージャ • config.xml で定義 • アプリケーションスコープワークマネージャ • weblogic-application.xml (EAR) • weblogic-ejb-jar.xml (EJB) <work-manager> • weblogic.xml (WAR) <name>WM01</name> で定義 <fair-share-request-class> <name>share20</name> <fair-share>20</fair-share> </fair-share-request-class> </work-manager> Copyright© 2009, Oracle. All rights reserved. 19
    • コンフィグレーション - ワークマネージャの使用法 • Web アプリケーション • Servlet 単位 • web.xml <init-param> <param-name>wl-dispatch-policy</param-name> <param-value>WM01</param-value> </init-param> • Web アプリケーション単位 • weblogic.xml <wl-dispatch-policy>WM01</wl-dispatch-policy> • EJB • weblogic-ejb-jar.xml <dispatch-policy>WM01</dispatch-policy> Copyright© 2009, Oracle. All rights reserved. 20
    • TIPS • 起動直後のパフォーマンスの立ち上がりが悪い • Why? • 起動直後はスレッドプール内のスレッドは少ない • スレッドは、スループットの測定で必要と判断された際に初めて増加する • 対応策 • 基本的には、ワークマネージャの設定による自動チューニングを推奨 • 起動直後にピークアクセスが発生することが分かっている場合に限り、内 部オプションでスレッドプール内のスレッド数を調整することも有効 • config.xml <server> <name>AdminServer</name> <self-tuning-thread-pool-size-min>30</self-tuning-thread-pool-size-min> <listen-port>7001</listen-port> <listen-address>XXX.XXX.XXX.XXX</listen-address> </server> • 起動オプション -Dweblogic.SelfTuningThreadPoolSizeMin=30 Copyright© 2009, Oracle. All rights reserved. 21
    • TIPS • 高負荷時に JDBC データソースの最大接続数を超えた取得が行われ てしまう • Why? • 高負荷により自動チューニングでスレッド数が増えすぎている • 最大スレッド数制約によるスレッド数の制限が必要 • 対応策 • 最大スレッド数制約にデータソース名を設定することが可能 • config.xml <max-threads-constraint> <name>MaxThreadsConstraint-0</name> <target>AdminServer</target> <count>-1</count> <connection-pool-name>AppDataSource</connection-pool-name> </max-threads-constraint> • データソースの最大接続数でスレッド数が制限される Copyright© 2009, Oracle. All rights reserved. 22
    • TIPS • Web アプリケーションが突然 503(Service Unavailable) エラーを返す ようになった • Why? • アプリケーションの処理でスレッドがスタックしている(BEA-000337 とい う ID のメッセージで確認可能) • 過負荷防止のメカニズムにより、スレッドのスタックが検出されると、ワーク マネージャがシャットダウンされる • シャットダウンしたワークマネージャへのリクエストは 503 エラーで返る • 対応策 • スレッドがスタックする原因を取り除く • ワークマネージャでスレッドのスタックを無視するように設定 • ワークマネージャでスタックを検出する時間、スレッドの数を設定 • config.xml <work-manager> <name>stuckthread_workmanager</name> <work-manager-shutdown-trigger> <max-stuck-thread-time>1200</max-stuck-thread-time> <stuck-thread-count>2</stuck-thread-count> </work-manager-shutdown-trigger> </work-manager> Copyright© 2009, Oracle. All rights reserved. 23
    • 参考資料 • ワーク マネージャを使用したスケジューリング済み作業の最適化 • http://otndnld.oracle.co.jp/document/products/wls/docs103/config_wls /self_tuned.html • WebLogic Server 9.0におけるワークロード(作業負荷)管理 • http://www.oracle.com/technology/global/jp/pub/articles/dev2arch/2 006/01/workload-management.html • トラブルシューティング ガイド サポート診断パターン - 一般的なサーバ ハング • http://support.oracle.co.jp/bea/support_patterns- ja/Generic_Server_Hang_Pattern.html Copyright© 2009, Oracle. All rights reserved. 24
    • <Insert Picture Here>
    • Copyright© 2009, Oracle. All rights reserved. 26