2013年weblogic server勉強会の総まとめ

95
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 1 2013WebLogic Server勉強会 総まとめ 2014122日本オラクル株式会社

Upload: oracle-fusion-middleware

Post on 08-May-2015

3.540 views

Category:

Technology


4 download

DESCRIPTION

2014年1月22日に開催された「第43回WebLogic Server勉強会」の資料です。 「2013年WebLogic Server勉強会の総まとめ」 WebLogic Server勉強会で取り上げたトピックスの中から「さすがWebLogic」機能を選んでポイントを総復習します。セッションだけでなく、参加者からのQ&Aなどを含めてOracle ACEの山田貴裕さんと一緒に振り返ります。後半のW-1選手権の最終チェックにも有益でしょう。 日本オラクル Fusion Middleware事業統括本部 佐々木政和 伊藤忠テクノソリューションズ株式会社 Oracle ACE 山田 貴裕 氏

TRANSCRIPT

Page 1: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 1

2013年WebLogic Server勉強会総まとめ

2014年1月22日 日本オラクル株式会社

Page 2: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 3

WebLogic Server基本編

Page 4: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 4

WebLogic Server基本編

開催日 セッション 資料

1月24日 「起動・停止スクリプトを極める」 http://www.slideshare.net/OracleMiddleJP/ss-16168237

5月23日 「WebLogic Server の開発モードと本番モード」 http://www.slideshare.net/OracleMiddleJP/weblogic-server-

22423176

6月20日 「WebLogic Server デプロイメント エッセンシャルズ」

http://www.slideshare.net/OracleMiddleJP/20130620-

wlstudy-deployhandsout

8月21日 「Java EE アプリケーションをWebLogic Serverで動かしてみよう」

http://www.slideshare.net/OracleMiddleJP/20130821-

wlstudy-jeeapphandsout

Page 5: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 5

目標:WebLogic Serverを使って見る。

テーマ チャレンジ項目

インストール インストーラが12.1.2でOUIに変更。ドメインとは、管理サーバ、管理対象サーバ

開発モードと本番モード 開発モードと本番モードの違い、開発モードでのみ使用できる機能、開発モードと本番モードの切り替え

管理サーバと管理対象サーバの起動と終了 起動/停止スクリプトの構造、利用する可能性が高い環境変数

アプリケーションのデプロイ デプロイメントとは、2段階(インストール、アクティベーション)、コンソールデプロイメント、コマンドラインデプロイメント、自動デプロイメント、ステージングモード、デプロイメントプラン、プロダクション再デプロイメント、FastSwap

Page 6: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 6

WebLogic Server のインストール WLS12.1.2からインストーラがOUIに

TIPS: インストーラの起動

$ java –d64 –jar wls_121200.jar

TIPS: インベントリ・ディレクトリが存在しない場合はインベントリ・ディレクトリを指定

Page 7: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 7

ドメインディレクトリ構成

ディレクトリ 説明

1 domain ドメインディレクトリ (ディレクトリ名=ドメイン名)

0 autodeploy 自動デプロイメントディレクトリ(開発モード用)

0 bin 起動・停止スクリプト etc

管理サーバ: startWebLogic.sh / stopWebLogic.sh

管理対象サーバ: startManagedWebLogic.sh / stopManagedWebLogic.sh

0 config コンフィグレーションディレクトリ

config.xmlが配置される

0 init-info ドメインの初期化情報

0 nodemanager ノードマネージャ・ホームディレクトリ (WLS12.1.2 ~)

0 pending ペンディングコンフィグレーションストア

(編集中のコンフィグレーションの保存先)

0 security セキュリティファイル (ldift, SerializedSystemIni.dat)

1 servers サーバローカルディレクトリ

servers配下にサーバごとにディレクトリが作成される 0 server_name

Page 8: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 8

起動スクリプトと停止スクリプト 1月24日「起動・停止スクリプトを極める」資料引用

Page 9: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 9

カスタマイズ対象の環境変数 1月24日「起動・停止スクリプトを極める」資料引用

Page 10: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 10

管理対象サーバーのマシン 管理サーバーのマシン

ステージングとは? デプロイ対象のサーバーにアプリケーションを配布すること

webApp.war

<source_dir>

webApp.war

<server_dir>

stage

upload

webApp.war

servers

<domain>

<server_dir>

stage

<app-name>

webApp.war

servers

<server_root>

管理対象サーバー

webApp.war

アップロード ステージング

ロード

アクティブ化

アプリケーション・ファイルは管理サーバの任意のディレクトリに配置可能。

ファイルは必要に応じてアップロード可能。(コンソール/

コマンドライン)

管理サーバからステージされるファイルは各サーバーのステージングディレクトリに配置される

Page 11: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 11

コマンドラインデプロイメント

準備完了

アクティブ

② ③

⑥ ⑤

WLST weblogic.Deployer

① distributeApplication() -distribute

② startApplication() -start

③ stopApplication() -stop

④ undeploy() -undeploy

⑤ deploy() -deploy

⑥ undeploy() -undeploy

⑦ redeploy() -redeploy

コマンドラインデプロイメントはWLST、またはweblogic.Deployerで実行可能 * コマンドは管理サーバに対して実行 デプロイなし

管理モード起動時は管理ポートを有効化する必要がある

(主にプロダクション再デプロイメント用)

管理

③ ②

② ③

Page 12: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 12

プロダクション再デプロイメント

WebLogic Serverではアプリケーションをバージョニング可能

– 保持できるバージョンは2つまで

プロダクション再デプロイメントでは新しいバージョンと古いバージョンを並行してデプロイする

– 既存のクライアント・リクエストは古いバージョンへ

– 新しいクライアント・リクエストは新しいバージョンへ

バージョニングによる再デプロイメント

プロダクション再デプロイメントを使用するとサービスを中断しないアプリケーション更新をサーバ単体で実現可能

Page 13: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 13

プロダクション再デプロイメント

WebLogic Server

古い

アプリケーション

WebApp (v1)

新しい

アプリケーション

WebApp (v2)

既存の

ユーザ・リクエスト

新しい

ユーザ・リクエスト

新バージョンデプロイ後は

リタイア中に

デプロイ後は新バージョンが

アクティブに

アクセスするバージョンはWebLgoic Serverが管理

NOTE: すべてのセッションがタイムアウト or 指定したタイムアウト時間経過でアプリケーションはリタイアする

Page 14: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 14

WebLogic Server データベース接続

Page 16: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 16

目標:データソース設定を適切に

テーマ チャレンジ項目

データソース設定パラメータ それぞれの意味を理解し環境に合わせた設定ができること。

障害時対応 障害時のリカバリを学ぶ。動作内容、振る舞いを理解する。

GridLinkデータソース 特長と動作内容を理解する。

Page 17: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 17

データソースを使ったデータベースアクセス アプリケーションは接続情報を意識しない

WebLogic Server

データソース

接続プール

JNDI デプロイ時にバインド

RDBMS

デプロイ時に

初期容量まで接続

JNDIルックアップ

(論理名で検索)

@Resource(name = "jdbc/test") DataSource ds; try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement(QUERY)) { pstmt.setString(1, "xxx"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // .... } } catch (SQLException e) { // 例外処理

}

開発者 運用担当者

接続オブジェクト取得

Page 18: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 18

データベースとの接続が失われた場合

データベースとの接続が失われると接続オブジェクトは無効になる

– WebLogic Serverデータソースでは接続テストによって無効な接続をリフレッシュ可能

接続テストを行わないと無効な接続を保持し続ける

接続プール

RDBMS

@Resource(name = "jdbc/test") DataSource ds; try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement(QUERY)) { pstmt.setString(1, "xxx"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // .... } } catch (SQLException e) { // 例外処理

}

1. ds.getConnection()

2. SELECT 1 FROM dual

3. Connectionを返却

無効な接続を破棄して再作成

Page 19: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 19

接続テストの振る舞い

データベース接続が失われた場合

– テストなし … 無効な接続が維持される

– テストあり … テストに2回失敗すると全接続を閉じる

全接続が閉じられたデータソースは無効化される(PoolDisabledSQLException)

– リフレッシュ・プロセスとして定期的なヘルス・チェックを実行(5秒間隔)

– データベースが回復すると接続を作成し、データソースを有効化する

テスト設定の有無でデータソース無効化のタイミングが異なる

DB接続の失敗を許容しない場合:

アイドル・プール接続を信頼する秒数=0, 予約時に接続をテスト=有効化

DB接続の失敗を許容できる場合:

アイドル・プール接続を信頼する秒数…大きく,テスト頻度>0 or 予約時に接続をテスト=有効化

Page 20: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 20

GridLinkデータソースと汎用データソース

汎用データソース

– 接続先のRACインスタンスを意識していない

– 実行時ロードバランスはなく、RAC側の都合は意識できない。実行先RACインスタンスに偏りが出る可能性がある。

– RACサービス(インスタンス)の動的な停止、起動に対する物理接続の作成、終了タイミングが制御できない

GridLinkデータソース

– 接続先のインスタンスを意識できる(アプリケーションからは透過)

– FANイベントによりRAC側のステータスを把握でき、適切な実行時ロードバランスが可能

– RACサービス(インスタンス)の停止では迅速にそのインスタンスだけの接続を終了させ、起動時は自動的にそこへの物理作成を作成

RAC接続時の振る舞いの違い

RAC データソース

Connection

Connection

Connection

Connection

RAC

GridLink DS

Connection

Connection

Connection

Connection

RAC1

RAC1

RAC2

RAC2

FAN

RACステータスなし

RAC ステータス

通常のデータソース

GridLinkデータソース

Page 21: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 21

ONS (Oracle Notification Service)

– RAC側の情報をFANイベントとして送信する仕組み

FAN (Fast Application Notification )

– RAC側の死活情報、負荷情報などを含んだ情報

UCP ( Universal Connection Pool)

– GridLinkデータソースがFANイベント情報を扱うために内部で利用

ロード・バランシング・アドバイザ

– RACのサービスレベルでの負荷状況をFANを通じてアプリケーションに提供

UCP-RAC モジュール

ONS Daemon

Web

Lo

gic

Serv

er

RA

C

死活・負荷状況通知

インスタンス1 GridLinkデータソース

(サービスA用)

インスタンス2

ON

S

clien

t

サービス

A ロード・バラ

ンシング・アドバイザ

ONS Daemon

FAN

GridLinkデータソースの仕組み WebLogic ServerデータソースにUCPの機能を統合

Page 22: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 22

高速接続フェールオーバー (FCF)

UCPがサブスクライブしているRAC FANイベントをWebLogic Server の接続プールに通知

– RACノードの計画/計画外停止(DOWNイベント)

– RACノードの新規追加や復旧(UPイベント)

通知されたイベントをもとにWebLogic Server側で接続プールを制御

– 無効な接続を検知し即座に削除 … 障害インスタンスの接続だけ削除し、正常なインスタンスへの接続は維持

– ノードの追加や削除を検知し、アクティブなRACインスタンスに分配

障害時の早期エラー検出機能

GridLink DataSource

Instance2

RAC Database

Instance1

Instance3

Start ONS Subscribe

Handle Event ONS Publish X

X X

X

Universal Connection Pool (UCP)

FAN

WebLogic Server

Page 23: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 23

実行時接続ロードバランシング (RCLB)

Oracle RACのロード・バランシング・アドバイザ

– RACインスタンスが自身のSQL実行統計を観測し、最適なリクエスト配分を算出

サービスタイムまたはスループットのどちらかを優先した方法でリクエスト配分を算出

リクエスト配分をFANイベントとして、ONS経由でGridLink内のUCPモジュールに送信

GridLinkデータソース

– 各インスタンスのリクエスト配分率にしたがってプールからどのインスタンスへの接続を取得するかを選択

クラスタの設定変更、アプリケーションのワークロード、過負荷/ハング状態のノードにも対応

負荷状況に応じた最適なリクエスト配分

GridLinkデータソース

Application

RAC Database

Instance1

Instance2

Instance3

ロード・バランシング・アドバイザ

リクエスト配分比率

inst1: 30%

inst2: 10%

inst3: 60%

リクエスト配分

比率情報

SQL実行統計

SQL実行統計

SQL実行統計

比率に応じた

コネクション

FAN

30%

10%

60%

WebLogic Server

Page 24: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 24

最初のリクエストはRCLBによってインスタンスを選択

コンテキスト内に選択されたインスタンス情報が保存され同じHttpセッション内で有効

– セッション外のリクエストはXAアフィニティで処理

– アフィニティのON/OFFをRAC側が自動的に制御。アフィニティヒントとしてFANで通知

前回と同じインスタンス用のコネクション

Webセッション・アフィニティ セッション処理を同じRACインスタンスで処理

GridLinkデータソース

Application

RAC Database

Instance1

Instance2

Instance3

ロード・バランシング・アドバイザ アフィニティヒント

inst1: true

inst2: true

inst3: true

アフィニティ

有効フラグ

待機イベント統計

待機イベント統計

待機イベント統計

HTTPセッション

アフィニティ・コンテキスト

sessionXX : inst1

FAN

WebLogic Server

Page 25: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 25

XAトランザクション・アフィニティ

最初のリクエストはRCLBによってインスタンスを選択

コンテキスト内にインスタンス情報が保存され同じXAトランザクション内で有効になる

– WebLogicのコンテキスト伝搬機能により他のサーバーでもコンテキスト情報が共有され同じRACインスタンスを選択

– アフィニティのON/OFFをRAC側が自動的に制御。アフィニティヒントとしてFANで通知。

XA処理を同じRACインスタンスで処理

GridLInkデータソース

TXClient 1

RAC Database

Instance1

Instance2

Instance3

XAトランザクション

コンテキスト伝搬

TXClient 2 前回と同じインスタンス用のコネクション

Txコンテキスト

XID xxx : inst1

WebLogic Server

Page 26: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 26

WebLogic Scripting Tool (WLST)

Page 28: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 28

目標:WLSTを使って見る。

テーマ チャレンジ項目

WLST活用 WLSTサンプルの内容を理解し、カスタマイズして動作を確認する。

MBean MBeanを使ったWLSTを作成し理解を深める。

Page 29: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 29

WLSTの機能

複数のツールで実行していたWebLogic Serverの管理作業をWLSTひとつに集約できる

ドメイン構成ウィザード

weblogic.Deployer

Administration Console

WLST

Page 30: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 30

WLST操作の基本的な流れ

管理サーバ

Runtime Configuration Edit

cd

ls

get

startEdit cd set save activate

cd ls get

WLST edit edit

server Runtime

server Config

serverConfig serverRuntime

connect

① サーバに接続

② 操作目的に応じてツリー(MBeanサーバ)を移動

③ 目的のコマンドを実行

Page 31: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 31

WLST操作

① サーバに接続

② 操作目的に応じてツリー(MBeanサーバ)を移動

③ 目的のコマンドを実行

a. ロックして編集

b. 管理対象サーバー作成

c. 保存

d. アクティブ化

Page 32: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 32

WebLogic Server クラスタリング

Page 33: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 33

WebLogic Serverクラスタリング

開催日 セッション 資料

9月26日 「Oracle WebLogic Serverクラスタリングの勘所」 http://www.slideshare.net/OracleMiddleJP/20130926-

wlstudy-clusterhandsout

Page 34: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 34

目標:クラスタの役割と機能を学ぶ。

テーマ チャレンジ項目

クラスタ概要 クラスタの役割と機能を理解し環境に合わせた設定ができること。

フェイルオーバ 障害時の動作内容、振る舞いを理解。フェイルオーバの流れを理解する。

クラスタ環境設定 クラスタグループなどの効率的な設定方法を学ぶ。

Page 35: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 35

WebLogic Server クラスタ

複数の『サーバー』の論理的なグループ

– 各サーバー上にデプロイされたアプリケーション・サービスに対して拡張性・高可用性を提供する

– クライアントからは単一のサーバにアクセスしているように見えるように複数のサーバーが協調動作する

クラスタ

サーバー サーバー

サーバー サーバー クライアント

クライアントはアクセスするサーバーを意識しない

アプリケーション

サービス

Page 36: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 36

設定箇所の確認

クラスタの設定: WebLogicドメインで設定

プロキシの設定: プロキシ側で設定

mydomain

cluster1

Server1

Web コンテナ

EJB コンテナ

Server2

Web コンテナ

EJB コンテナ

RDBMS プロキシ

データソース

データソース

AdminServer ドメイン設定

設定ファイル

HTTPサーバーやロードバランサの設定

WLSドメインの設定

Page 37: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 37

Webアプリケーションのクラスタ化

クラスタにデプロイされたWebアプリケーションへの負荷分散・フェイルオーバーはプロキシプラグインによって行われる

– WebLogic Server Plugin (HTTP サーバー)

– ロードバランサ

Webアプリケーションのフェイルオーバーにはユーザの対話状態(HttpSession)

を永続化する必要がある

– インメモリレプリケーション

– Cookie

– File

– JDBC

通常はインメモリレプリケーションを第一候補に検討 HttpSessionの消失が許容できない場合はJDBCを検討 信

頼性

速度

Page 38: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 38

HttpSession永続化設定

HttpSessionの永続化設定は、Webアプリケーションの デプロイメント記述子(weblogic.xml)で指定

– IMRはreplicated | replicated_if_clustered (デフォルトは memory )

Webアプリケーションの設定

TIPS: 永続化方式にreplicated_if_clusteredを指定すると、クラスタ、非クラスタにデプロイ可能

weblogic.xml

Page 39: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 39

インメモリレプリケーション

HttpSession をクラスタ内の2つのサーバーで保持する

– セッション毎にプライマリ・セカンダリサーバーが決定される

– サーバーにはプライマリ・セカンダリセッションが混在する

セカンダリ分だけヒープ消費量は増大

cluster1

プロキシ

Server1 Server2 Server3

セカンダリ

1

クライアント

プライマリ

1

2 2

3

3

Page 40: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 40

インメモリレプリケーションの動作

プライマリサーバーは負荷分散によって初回リクエスト時に決定

– セカンダリサーバーはレプリケーション・グループとマシン設定からHttpSession生成時に決定

– セカンダリサーバーへの同期はHttpSession#setAttribute()がトリガ

– プライマリ・セカンダリサーバー情報

はCookieに埋め込まれる

正常時

cluster1

プロキシ

Server1 Server2 Server3

セカンダリ

setAttribute()

クライアント

プライマリ

プライマリ = Server3

セカンダリ = Server2

Page 41: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 41

インメモリレプリケーションの動作

プライマリサーバーに障害が発生するとセカンダリが昇格

– 別のサーバでセカンダリが再生成される

プロキシプラグインによってセカンダリサーバーにリクエストの振り替えられる

– 振り替えはクライアントからの次の

リクエスト時

– プロキシプラグインはCookieの

サーバーリストをもとにセカンダリ

サーバーに接続

フェイルオーバー

cluster1

プロキシ

クライアント

Server1 Server2 Server3

プライマリ プライマリ セカンダリ

プライマリ = Server3

セカンダリ = Server2

Page 42: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 42

インメモリレプリケーションの動作

プライマリに昇格したサーバーはCookieを更新

– プライマリとセカンダリ情報が更新されたCookieがクライアントに戻される

フェイルオーバー

cluster1

Server1 Server3

セカンダリ

Server2

プライマリ

クライアント

setAttribute()

プライマリ = Server2

セカンダリ = Server1

TIPS: セッションIDのフォーマット

[SessionID]![JVMID1]![JVMID2]![CreationTime]

プロキシ

Page 43: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 43

cluster1

MachineX MachineY

インメモリレプリケーションとマシン

セカンダリセッションの作成先は別マシン上のサーバーが優先される

– 1つのH/W上に複数のサーバーが存在する場合はマシンを定義しないと同一

H/W上にセカンダリセッションが

作成される可能性がある

プロキシ

Server1 Server2 Server3

セカンダリ

1

クライアント

プライマリ

1

2 2 2

Page 44: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 44

インメモリレプリケーションの考慮事項

リクエストのフェイルオーバーはプラグインによって行われる

– クライアントからのリクエスト到達までにプライマリ/セカンダリサーバーが共にダウンするとセッションは継続できない

– セッションの消失が許容できない場合はインメモリレプリケーションは選択不可

– IMRを使用する場合は3つ以上のサーバーでクラスタを構成することを推奨

HttpSessionに格納するデータサイズが大きすぎるとレプリケーションでオーバーヘッドが発生する

– HttpSessionに格納するデータは可能な限りコンパクトに

java.io.Serializableの実装も忘れずに

– 同期のトリガはHttpSession#setAttribute()

Page 45: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 45

Java EE

Page 46: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 46

Java EE

開催日 セッション 資料

3月21日 「Java Persistence API入門」 http://www.slideshare.net/OracleMiddleJP/java-persistence-

api-17707340

3月21日 「WebLogic ServerでJAX-RS」 http://www.slideshare.net/OracleMiddleJP/weblogic-

serverjaxrs

6月20日 「Context and Dependency Injection(CDI)

入門」 http://www.slideshare.net/OracleMiddleJP/20130620-

wlstudy-cdiv01

Page 47: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 47

目標:JPA, JAX-RS, CDIの概要を学ぶ。

テーマ チャレンジ項目

JPA 目的、メリット、機能を理解し実際に使用する。

JAX-RS 目的、メリット、機能を理解し実際に使用する。

CDI 目的、メリット、機能を理解し実際に使用する。

Page 48: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 48

JPA概要 Java Persistence APIの略

Java EE環境に限らず、Java SEでも利用可能

O/Rマッピングの仕様

– データベースのテーブルのレコードをJavaのオブジェクトに相互変換

– Javaのオブジェクトにアクセスし、データベース操作可能

「JSR-000317 JavaTM Persistence 2.0 (Final Release)」(2009年12月10日)

「JSR-000338 JavaTM Persistence 2.1 (Final Release)」(2013年5月22日)

データベース

Java

Object

マッピング(自動で相互変換)

App

参照 挿入 更新 削除

Page 49: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 49

JPAプログラミング

public static void main(String[] args) { Connection con = null; PreparedStatement stm = null; try { Class.forName(“oracle.jdbc.OracleDriver”); con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "HR", "hr"); stm = con.prepareStatement("SELECT * FROM Employees e WHERE e.EMPLOYEE_ID = ?"); stm.setInt(1, 100); ResultSet rSet = stm.executeQuery(); if (rSet.next()) { Employee emp = new Employee(); emp.setEmployeeId(rSet.getLong("EMPLOYEE_ID")); emp.setLastName(rSet.getString("LAST_NAME")); emp.setFirstName(rSet.getString("FIRST_NAME")); emp.setEmail(rSet.getString("EMAIL")); emp.setPhoneNumber(rSet.getString("PHONE_NUMBER")); emp.setHireDate(rSet.getDate("HIRE_DATE")); emp.setJobId(rSet.getString("JOB_ID")); emp.setSalary(BigDecimal.valueOf(rSet.getLong("SALARY"))); emp.setCommissionPct(BigDecimal.valueOf(rSet.getLong("COMMISSION_PCT"))); emp.setDepartmentId(BigDecimal.valueOf(rSet.getLong("DEPARTMENT_ID"))); System.out.println(emp); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (stm != null) stm.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); } }

public static void main(String[] args) { EntityManager em = Persistence.createEntityManagerFactory("db").createEntityManager(); Employee emp = em.find(Employee.class, 100L); System.out.println(emp); em.close(); }

コード量大幅削減

Page 50: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 50

JPAの構成要素

Persistence Context

EntityManager

Persistent Unit

(persistence.xml)

EntityManagerFactory

Entity

Entity

Entity

Entity

Entity

データベース

決定 生成

Persistence Unitの設定に基づき、Entity Managerのインスタンスを生成

データ操作及び管理の為のAPIを提供する

Page 51: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 51

Entityとは

テーブルに対応したマッピング対象のクラス(=Entity)

– ただのPOJO(Plain Old Java Object)で作成

– @Entityアノテーション ⇒ Entityクラスであることを示す

– @Idアノテーション ⇒ 主キーを示す

@Entity public class Customer { @Id private Long id; private String address1; private long age; private String name; private String telephone; //セッタ・ゲッタ }

ID ADDRESS1 AGE NAME TELEPHONE

Entity Customerクラス

データベース

CUSTOMER表

Page 52: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 52

Entityのライフサイクル

Page 53: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 53

Entityのライフサイクル(コード例)

ライフサイクルのコード例

– Entityのインスタンスを生成(new)しただけではデータベースには何も反映されない

EntityManagerFactory emf = Persistence.createEntityManagerFactory(”DB"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); Customer customer = new Customer(); //Entityの生成 tx.begin(); em.persist(customer); //管理状態のEntity tx.commit(); //デタッチ状態になるEntity //JavaのHeapにはcustomerは存在するが、JPAの管理状態から外れデタッチ状態 //この状態でcustomerに対する操作を行った場合は、merge()で同期 em.close(); emf.close();

Page 54: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 54

2種類のEntityManager コンテナ管理のEntityManager(Java EE環境)

– アノテーション、DIによりEntityManagerインスタンスを注入

– コンテナがトランザクションを管理する

アプリケーション管理のEntityManager(Java SE/EE環境)

– Factoryメソッドを使用して、EntityManagerを取得

– アプリケーション側でトランザクションを管理のためのコーディング必要

@PersistenceContext(unitname = “DB”) private EntityManager entityManager;

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“DB"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); em.persist(customer); tx.commit(); em.close(); emf.close();

Page 55: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 55

JAX-RS概要

The Java™ API for RESTful Web Servicesの略

JAX-RSはHTTPを使用したシンプルなWebサービスの仕様

ステートレスであり、セッション情報などの状態を保持しない。

「JSR-000311 JAX-RS 1.1: The JavaTM API for RESTful Web Services」(2009年9月17日)

「JSR-000338 JAX-RS 2.0: The JavaTM API for RESTful Web Services」(2013年5月24日)

Page 56: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 56

JAX-RSとは 3月21日「WebLogic ServerでJAX-RS」資料引用

Page 57: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 57

JAX-RSとは 3月21日「WebLogic ServerでJAX-RS」資料引用

Page 58: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 58

JAX-RSとは 3月21日「WebLogic ServerでJAX-RS」資料引用

Page 59: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 59

Context and Dependency Injection(CDI)概要

JSR 299: Contexts and Dependency Injection for the JavaTM EE platform

(2009年12月10日)

Contexts:サーバ上の状態を表現するもの

Dependency Injection:依存性の注入

コンポネント間を疎結合にできる コードがよりシンプルになる

インスタンスのライフサイクル管理や

インスタンス(の依存関係)の注入をコンテナが引き受ける

(=プログラマが、クラスをnewしたり、setメソッドを呼び出す必要が減少)

Page 60: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 60

CDIができること

DI(依存性注入) インターセプト

インスタンスのライフサイクル管理 EL式からのアクセス

Bean

Bean HTTPリクエスト

Page 61: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 61

Java EE 5のDI

DIの機能はJava EE 5 でも使用可能だが…

@ManagedBean public class SampleMg { @EJB private Logic lg; }

JSF EJB JPA 依存関係

@Stateful public class Logic { @PersistenceContext(unitName=“JPA”) private EntityManager em; }

<?xml version="1.0" encoding="UTF-8" ?> <persistence xxx> <persistence-unit name=“JPA"> …略

プレゼンテーション層 ビジネスロジック層 データアクセス層

依存関係

注入する種別によってアノテーションが異なる 注入先も限定的

Page 62: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 62

Java EE 6のCDI

CDIを使用したコーディング

@Named @RequestScoped public class SampleMg { @Inject private Logic lg; }

JSF EJB JPA 依存関係

@Stateful public class Logic { @Inject private EntityManager em; }

<?xml version="1.0" encoding="UTF-8" ?> <persistence xxx> <persistence-unit name=“JPA"> …略

プレゼンテーション層 ビジネスロジック層 データアクセス層

依存関係

注入する種別が異なっても@Injectで注入可能 注入先も自由

Page 63: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 63

Java EE 6のCDI:何を注入するか

注入先の型がインターフェースの場合

実装クラスのインスタンスを生成して注入

実装クラスが複数ある場合はエラー

public class xxBean{ @Inject private BizLogic logic; }

public class BizLogicImpl implement BizLogic { }

public class xxBean{ @Inject private BizLogic logic; }

public class BizLogicImplJAPAN implement BizLogic { }

public class BizLogicImplUS implement BizLogic { }

Error

Qualifierの機能を使用して適切に注入できるようになる

public class xxBean{ @JPN @Inject private BizLogic logic; }

@JPN public class BizLogicImplJAPAN implement BizLogic { }

注入

注入

解決方法例

Page 64: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 64

WebLogic Serverチューニング

Page 65: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 65

WebLogic Serverチューニング

開催日 セッション 資料

11月27日 「Oracle WebLogic Serverチューニングのポイント」

http://www.slideshare.net/OracleMiddleJP/20131127-

wlstudy-tuninghandsout

Page 66: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 66

目標:チューニング要素をマスター

テーマ チャレンジ項目

WebLogic Serverアーキテクチャ リクエスト処理の流れを理解する。

ワークマネージャ 機能、振る舞いを理解する。

リソース 全体最適のためにリソースを効率良く使うためのTipsをマスターする。

Page 67: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 67

WebLogic Server EAR

WebLogic Serverのリクエスト処理 リクエスト処理でポイントになる箇所

データベース

クライアント クライアント クライアント クライアント クライアント

SocketMuxer

WorkManager

Webコンテナ EJBコンテナ

(フリープール) データ

ソース

7001

データベースへの接続要求が最大容量を超えると待ちが発生する

SLSBのフリープールサイズが小さいとEJB呼び出しで待ちが発生する

スレッドプールのスレッドがワークマネージャによって使用される

スレッド数は負荷に応じて自動チューニングされる

原則としてMuxerはNativeI/Oを使用

ワークマネージャに最大容量が設定されているとスレッド割り当て待ちが発生する

最大容量を設定しないとスレッド数が増えすぎて適性な性能を得られない場合がある

カスタムワークマネージャを使用する場合はアプリケーション側で指定

Page 68: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 68

WebLogic Server EAR

WebLogic Serverのリクエスト処理 クライアントからのリクエストはスレッドで処理される

データベース

SocketMuxer

WorkManager

Webコンテナ EJBコンテナ

(フリープール) データ

ソース

7001

単一のスレッドプールの実行スレッドでリクエストを処理

SocketMuxerによって実行スレッドに引き渡される

Muxerキュー

Muxerスレッド

スレッドプール

ワークマネージャ

バックログ

リクエスト受信 リクエスト処理

リクエストはMuxer

キューへ(リスンスレッド)

Page 69: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 69

ワークマネージャの構成要素

ワークマネージャ

– 要求クラス … フェアシェア、応答時間、コンテキストのうち1つを指定

– 制約 … 最大スレッド数、最小スレッド数、容量を任意で指定

要求クラスと制約

ワークマネージャ 要求クラス

制約 1

制約 2

Page 70: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 70

要求クラス リクエストの重みを決定する

要求クラス 説明

フェアシェア要求クラス リクエスト割り当ての重みを指定 フェアシェアは1~1000の任意の数値を指定。

2つのワークマネージャにそれぞれフェアシェア10, 20を設定した場合は1:2の割合でスレッドが割り当てられる

応答時間要求クラス 応答目標時間を指定 2つのワークマネージャにそれぞれ2000ms, 1000msと応答時間を設定した場合は1:2の割合でスレッドが割り当てられる

コンテキスト要求クラス ユーザ/グループ毎に要求クラスを指定 ユーザAにフェアシェア50、ユーザBにフェアシェア100の要求クラスを設定した場合はユーザBのリクエストに多くスレッドが割り当てられる

Page 71: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 71

制約 スレッド生成やリクエスト数を制限する

最大スレッド数制約 最大同時実行数 複数ワークマネージャで共有可能

最小スレッド数制約 最小同時実行数 主にデッドロック防止のために使用

容量制約 実行中+キューに滞留するリクエストの最大数 容量制約に達するとリクエストは拒否される

Page 72: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 72

過負荷保護機能

サーバの処理能力を超えるリクエストを受入れ続けると過負荷状態に陥る

– システムを過負荷状態から保護・検出するための設定

スレッドプール内の要求数の制限 (共有容量)

HTTPセッション数の制限

メモリ不足例外発生時の終了・低メモリ状態の検出

スタック スレッドの処理

– 過負荷状態のサーバは強制停止・再起動するように設定可能

要設定。デフォルトでは何もしない

Page 73: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 73

データソース

アプリケーションで接続待ちが発生しないことが理想的

– 接続待ちが発生しないように最大容量を設定する

実行スレッド数を目安に設定を開始、負荷状況によって最大容量を決定する

– 原則は初期容量=最大容量

初期容量と最大容量に差があると容量増加時に待ちが発生する可能性あり

容量の管理がキーポイント

Page 74: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 74

Tips: 最大容量と最大スレッド数制約

ワークマネージャの最大スレッド数制約ではデータソースの最大容量を指定することができる

データソースの最大容量を超える実行スレッドの生成を抑制するには?

データソース名を指定

データソースの最大容量が容量制約数になる

解消できる問題点: 自動チューニングスレッドプールで負荷に応じてスレッド数が増えてもデータソースの最大容量を超えてしまうと接続待ちによる処理の遅延が発生する

Page 75: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 75

参考: モニタするMBean属性

MBean 属性

JDBCDataSourceRuntime CurrCapacity

ActiveConnectionsCurrentCount

WaitingForConnectionCurrentCount

ThreadPoolRuntime ExecuteThreadTotalCount

ExecuteThreadIdleCount

StandbyThreadCount

PendingUserRequestCounts WorkManager単位でのPending数を取得する場合はRequestClassRuntime

必要に応じてHighCountも取得

ActiveConnectionsHighCount

WaitingForConnectionHighCount

アクティブなスレッド数は以下で算出 = ExcecuteTreadTotalCount – ExecuteThreadIdleCount

– StandbyThreadCount

Page 76: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 76

参考: モニタするMBean属性

MBean 属性

ServerRuntime OpenSocketsCurrentCount

WebAppComponentRuntime OpenSessionsCurrentCount

StatelessEJBRuntime PooledBeansCurrentCount

BeansInUseCurrentCount

WaiterCurrentCount

JVMRuntime HeapFreeCurrent

HeapSizeCurrent

Page 77: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 77

WebLogic Server トラブルシューティング

Page 78: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 78

WebLogic Serverトラブルシューティング

開催日 セッション 資料

1月24日 「スローダウン、ハングを一発解決! スレッドダンプはトラブルシューティングの味方」

http://www.slideshare.net/yusukey/wlstudy

5月23日 「今日から始めるトラブルシューティング - Flight

Recorder入門」 http://www.slideshare.net/OracleMiddleJP/flight-recorder-

22422966

11月27日 「高負荷試験で得た体験談」 http://www.slideshare.net/OracleMiddleJP/ss-29344482

12月19日 「Oracle WebLogic Serverトラブルシューティングのポイント」

http://www.slideshare.net/OracleMiddleJP/20131219-

wlstudy-troubleshootinghandsout

12月19日 「Flight Recorder活用の実践」 http://www.slideshare.net/OracleMiddleJP/jfr-fordevelopers

Page 79: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 79

目標:トラブルシューティング総合力向上

テーマFlight Recorder チャレンジ項目

トラブルシューティング準備 万一に備えて必要な情報収集や設定を行うためのノウハウを養う。

障害時対応 障害時に適切な情報やツールを活用して原因究明を行う。

Flight Recorder Mission Controlを使用してFlight Recorderイメージファイルから障害時に遡って状況分析を行う。

Page 80: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 80

トラブルシューティング手法

利点 考慮事項

ログ サーバーで発生するイベントを時系列で取得可能。トラブル発生時の初期情報の収集に最適。

サーバログ … サーバのアクティビティ

GCログ … GCの発生頻度

HTTPログ … ユーザリクエスト

情報が各ログファイルに分散しているため一元的に情報を把握しにくい

・Enterprise Managerを使用すると横串検索可能

Javaスレッドダンプ JVMで行われているスレッド処理のスナップショットを取得。低負荷のため本番環境でも取得可能。

スレッドダンプはテキスト情報のため必要に応じてデータ加工の必要あり

・侍, ThreadLogicなど各種ツールを活用

WLDFイメージキャプチャ サーバーの設定、モニタ情報、ログ、スレッドダンプをまとめて取得可能。WLDFモジュールを設定すればルールに基づいて自動的にイメージキャプチャを取得可能。

イメージキャプチャ取得のオーバーヘッドとディスクサイズを考慮する必要アリ

自動キャプチャにはWLDFモジュールを構成する必要がある

Flight Recorder JVM+WebLogic Serverで発生するイベント詳細レベルで取得。Mission Controlを使用してGUIベースで解析可能。

常時Flight 記録を取得する場合はディスクサイズを考慮する必要アリ

情報収集ツールの比較

Page 81: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 81

トラブル発生時に集めるべき情報は?

WebLogic Serverのログファイル

– サーバーログ … <DOMAIN>/servers/<server_name>/logs/<server_name>.log

WebLogic Serverのアクティビティが記録されるログファイル。

– ドメインログ … <DOMAIN>/servers/<admin_server>/logs/<domain_name>.log

サーバーログを集約したもの。障害調査ではあまり使わない。

– HTTPログ … <DOMAIN>/servers/<server_name>/logs/access.log

クライアントからのアクセスを記録。拡張フォーマットを使うとリクエスト処理時間も取得可能

ログ情報 TIPS: 拡張フォーマットの設定方法 ( [サーバー]-[ロギング]-[HTTP] ▼詳細 )

1. フォーマットを 拡張 に変更

2. 拡張ロギング・フォーマットのフィールド を指定

date time c-ip s-ip cs-method cs-uri cs-uri-query sc-status bytes time-taken

Page 82: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 82

Tips: サーバーの標準出力のリダイレクト

サーバーの標準出力のリダイレクトは環境変数 WLS_REDIRECT_LOG

を指定する

startWebLogic.sh(cmd)を編集

WLS_REDIRECT_LOGの設定を追記

Page 83: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 83

サーバーログの重大度

Severity 説明 ドメインログ

TRACE 診断フレームワークからのメッセージ

DEBUG デバッグメッセージ(Debug=ONの場合)

INFO 通常の処理を通知するために使用する低レベルの情報メッセージ

NOTICE 重要度の高いINFOメッセージ ○

WARNING 問題のあるオペレーションまたはコンフィグレーションがあったが、通常のオペレーションに支障は生じない

ERROR ユーザ エラーが発生したことを示す。システムまたはアプリケーションでは、割り込みやサービスの限定的な低下を起こすことなくエラーに対処できる

CRITICAL システム エラーまたはサービス エラーが発生したことを示す。システムを回復できるが、サービスの一時的な損失や永久的な低下が発生する場合がある

ALERT システムの特定のサービスだけが使用不能の状態にある。自動回復を実行できない。この問題を解決するには管理者がすぐに措置を講じる必要がある

EMARGENCY サーバが使用不能な状態にある。この重大度は、重大なシステム障害または問題があることを示す

NOTICE以上のメッセージはデフォルトでドメインログに転送される

Page 84: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 84

Tips: デバッグ情報 サーバー単位で設定可能

デバッグ出力例: DebugJDBCSQL(コンソール:weblogic→jdbc→sql→DebugJDBCSQL/WLST ServerDebugMBean) ####<2013/12/15 15時43分43秒 JST> <Debug> <JDBCSQL> <DAOKADA-JP> <ManagedServer1> <[ACTIVE]

ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <BEA1-00036DDE372208547105> <1b7e5955c26b51de:29038235:142f4fe00cd:-8000-000000000000003e> <1387089823815> <BEA-000000> <[[weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_LogicalConnection-hrDataSource-4, oracle.jdbc.driver.LogicalConnection@2460cd3]] prepareStatement(SELECT EMPLOYEE_ID, COMMISSION_PCT, DEPARTMENT_ID, EMAIL, FIRST_NAME, HIRE_DATE, JOB_ID, LAST_NAME, MANAGER_ID, PHONE_NUMBER, SALARY FROM EMPLOYEES WHERE (FIRST_NAME LIKE ? OR LAST_NAME LIKE ?))>

デバッグ属性を選択して

有効化 or 無効化

Page 85: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 85

Tips: GCログオプション

説明 HotSpot JRockit

GCログ -verbose:gc -verbose:gc

GCログ(詳細) -XX:+PrintGCDetails -Xverbose:gcreport

-Xverbose:gcpause

GCのタイムスタンプ出力 -XX:+PrintGCTimeStamps (サーバー起動からの経過時間)

-Xverbosetimestamp

GCログをファイル出力 -Xloggc:<file_name> -Xverboselog:<file_name>

[gcpause][Tue May 21 10:42:45 2013][04868] [YC#25] [---] 26.105 ms (1236.973000-1236.999000) YC [gcpause][Tue May 21 10:42:45 2013][04868] [YC#25] [con] 0.002 ms (1236.973000-1236.973000) YC:PreGC [gcpause][Tue May 21 10:42:45 2013][04868] [YC#25] [pau] 26.062 ms (1236.973000-1236.999000) YC:Main [gcpause][Tue May 21 10:42:45 2013][04868] [YC#25] [con] 0.008 ms (1236.999000-1236.999000) YC:PostGC

[gcpause][Tue May 21 10:42:45 2013][04868] [OC#1] [---] 45.613 ms (1236.999000-1237.045000) OC [gcpause][Tue May 21 10:42:45 2013][04868] [OC#1] [con] 0.004 ms (1236.999000-1236.999000) OC:PreGC [gcpause][Tue May 21 10:42:45 2013][04868] [OC#1] [pau] 44.730 ms (1236.999000-1237.044000) OC:Main [gcpause][Tue May 21 10:42:45 2013][04868] [OC#1] [con] 0.810 ms (1237.044000-1237.045000) OC:PostGC

Page 86: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 86

トラブル発生時に集めるべき情報は?

スレッドダンプとは

– JVMで実行中のスレッドのスナップショット

スレッドがどんな処理を実行しているのか?

– JVMの標準機能

WebLogic Serverの障害解析以外でも活用可能

標準出力(/標準エラー出力)に出力される

Javaスレッドダンプ

スレッドダンプはシステムに負荷をかけずに情報収集できる最良のツール

スレッドダンプ取得時は

一定間隔で複数回取得

Page 87: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 87

スレッドダンプの取得方法

OS

– CTRL + BREAK / wlsvc -dump -svcname:service-name (Windows)

– kill -3 <pid> (Linux/UNIX)

WLST

– ThreadDump()

JVM

– jstack <pid> (HotSpot)

– jrcmd <pid> print_threads (JRockit)

Tips: Javaプロセスのpidは jps コマンドで確認 (HotSpot/Jrockitどちらでも使用可能)

Page 88: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 88

Tips: WebLogic Server診断フレームワーク WebLogic Server全体を監視、診断するための機能

監視データを生成する仕組み

構成情報や解析に必要な情報を統合的に取得する仕組み

監視対象の設定と通知の仕組み

監視データを取得する仕組み

監視データを

画面表示する

仕組み インスツルメンテーション

データパブリッシャ

データプロバイダ

(MBean)

イメージキャプチャ

データをファイルとして出力する仕組み

アーカイバ

ロガー

ハーベスタ

監視と通知

アクセサ

Page 89: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 89

障害時に集めるべき情報は?

スレッドダンプやGCログはトラブル解決に有益だが…

– トラブルが発生した瞬間に取得できるわけではない

– 必要な情報が得られない場合もある

Java Flight Recorder

– トラブル解決に必要な情報を常時記録可能 (=本番環境でも低負荷)

– JVMからアプリケーション(+WLS)まで幅広い情報を記録

必要なときに情報が得られるか?

トラブルの確実な原因を 「遡って」 追跡可能に

トラブルの発生から改善までのサイクルと手間を大きく短縮に

Page 90: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 90

Java Flight Recorder 全ては記録される

WebLogic Server

Mission Control

WLDF イベント イベント

Disk File

古いデータ

WLST

Applicatio

n Application WebLogic

JVM

Runtime

jrcmd/jcmd

ダンプ解析

ダンプ依頼

ダンプ依頼

ダンプ

ルールに基づくダンプトリガー

ダンプ依頼

イベント

診断イメージ

キャプチャ ダンプ依頼

Thread Buffer

Global Buffer

新しいデータ あふれたら移動

あふれたら移動

Rotating Buffer

Flight Recorder Runtime

FlightRecorder.jfr

Page 91: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 91

WebLogic ServerとFlight Recorderの連携

WebLogic ServerはFlight Recorderと連携可能

– サーバーで発生したイベントをFlight Recorderに送信

– WLDF診断イメージキャプチャにFlight Recorder記録を含める

WLDF Flight

Recorder

イベント

イメージキャプチャ

Page 92: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 92

Flight Recorder記録 Mission Controlの表示

Page 93: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 93

JRockit Mission Control MemoryLeak Detector

Page 94: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 94

Page 95: 2013年WebLogic Server勉強会の総まとめ

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 95