37
<Insert Picture Here> Oracle Direct Seminar サポートエンジニアが語る WebLogic Serverトラブルシュートのノウハウ 日本オラクル株式会社 カスタマーサービス統括 アドバンストカスタマーサービス本部

Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

  • Upload
    others

  • View
    23

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

<Insert Picture Here>

Oracle Direct Seminar

サポートエンジニアが語るWebLogic Serverトラブルシュートのノウハウ

日本オラクル株式会社カスタマーサービス統括 アドバンストカスタマーサービス本部

Page 2: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 2

アジェンダ

• はじめに

• 障害時に取得するWLSのログ情報

• Javaスレッドダンプの重要性

• 典型的なトラブルの事例とその解決方法

• Advanced Customer

Servicesのご紹介・SQL Serverからの移行アセスメント

・MySQLからの移行相談・PostgreSQLからの移行相談・Accessからの移行アセスメント

・Oracle Database バージョンアップ支援・Oracle Developer/2000 Webアップグレード相談

・パフォーマンス・クリニック・Oracle Database 構成相談

・Oracle Database 高可用性診断・システム連携アセスメント・システムセキュリティ診断

・簡易業務診断

無償技術サービスOracle Direct Concierge

http://www.oracle.com/lang/jp/direct/services.html

Page 3: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 3

アジェンダ

• はじめに

• 障害時に取得するWLSのログ情報

• Javaスレッドダンプの重要性

• 典型的なトラブルの事例とその解決方法

• Advanced Customer

Servicesのご紹介・SQL Serverからの移行アセスメント

・MySQLからの移行相談・PostgreSQLからの移行相談・Accessからの移行アセスメント

・Oracle Database バージョンアップ支援・Oracle Developer/2000 Webアップグレード相談

・パフォーマンス・クリニック・Oracle Database 構成相談

・Oracle Database 高可用性診断・システム連携アセスメント・システムセキュリティ診断

・簡易業務診断

無償技術サービスOracle Direct Concierge

http://www.oracle.com/lang/jp/direct/services.html

Page 4: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 4

• Oracle WebLogic Serverのよくあるトラブル事例として、下記のようなものがあげられます

• WebLogic Serverがハングする/無応答となる

• WebLogic Serverがクラッシュしcoreをはく

• JDBC接続でデータベースからの応答が悪くなる

• プロセスがCPU100%となり応答が返らなくなる

• Javaヒープメモリの使用量が徐々に増え続けていく

• これらの障害に対して適切な初動調査を行わないと、問題の原因を特定することができなくなります。

はじめに

Page 5: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 5

• 本セッションの目的ですが、Oracle WebLogic Serverで障害が発生した際に、適切な初動調査を行えるようになっていただきます。

• WebLogic Serverの基本的なアーキテクチャを理解し、Javaスレッドダンプの取り方、確認方法を習得して頂きます。

• 製品保守、運用管理の担当者様には、弊社サポートへの調査依頼をスムーズに行っていただけます。

はじめに

Page 6: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 6

アジェンダ

• はじめに

• 障害時に取得するWLSのログ情報

• Javaスレッドダンプの重要性

• 典型的なトラブルの事例とその解決方法

• Advanced Customer

Servicesのご紹介・SQL Serverからの移行アセスメント

・MySQLからの移行相談・PostgreSQLからの移行相談・Accessからの移行アセスメント

・Oracle Database バージョンアップ支援・Oracle Developer/2000 Webアップグレード相談

・パフォーマンス・クリニック・Oracle Database 構成相談

・Oracle Database 高可用性診断・システム連携アセスメント・システムセキュリティ診断

・簡易業務診断

無償技術サービスOracle Direct Concierge

http://www.oracle.com/lang/jp/direct/services.html

Page 7: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 7

• <DOMAIN_HOME>/servers/<SERVER_NAME>/logs

配下のログファイル• <SERVER_NAME>.log

一般的に「サーバログ」と言われるもの。サーバの状態を知る上での情報が出力されており、障害発生時に必ず必要となる。

• <DOMAIN_NAME>.log

一般的に「ドメインログ」と言われるもの。サーバログと重複する内容のため、障害調査では必要なし。

• access.log

一般的に「アクセスログ」と言われるもの。クライアントからのアクセスをすべて記録している。

• 標準出力ログ'次ページ(

WLSのログファイル

Page 8: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 8

WLSの標準出力ログ

• 右のように標準出力に情報が出力されるもの。スクリプトからの起動で確認できます。

• 障害解析に必要なスレッドダンプ情報や、JVMのGC

ログは、この標準出力に出力されます。

• これらは重要な情報となるため、運用環境ではファイルにリダイレクトする設定を施して下さい。

Page 9: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 9

WLS標準出力のリダイレクト –環境変数

• WLS9.x 以降、startWebLogic.sh には、WLS_REDIRECT_LOG という環境変数が用意されています。

• if “%WLS_REDIRECT_LOG%” 行の前にWLS_REDIRECT_LOG の設定を追加します。

:

%JAVA_HOME%¥bin¥java %JAVA_VM% -version

set WLS_REDIRECT_LOG=wls_stdout.log

if "%WLS_REDIRECT_LOG%"=="" (

:

記述例:

Page 10: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

WLS標準出力のリダイレクト –直接設定

記述例: '1行で記述します。(

:

%JAVA_HOME%¥bin¥java %JAVA_VM% %MEM_ARGS%

%JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME%

-Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE%

-Djava.security.policy="%WL_HOME%¥server¥lib¥weblogic.policy"

weblogic.Server >> wls_stdout.log 2>&1

:

※">>" とした場合は、対象ファイルに対して追記で、

">" とした場合は、上書きになります。

10

• startWebLogic.shでweblogic.Serverクラスを呼び出している個所に、以下のようにリダイレクト先を直書きします。

Page 11: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 11

アジェンダ

• はじめに

• 障害時に取得するWLSのログ情報

• Javaスレッドダンプの重要性

• 典型的なトラブルの事例とその解決方法

• Advanced Customer

Servicesのご紹介・SQL Serverからの移行アセスメント

・MySQLからの移行相談・PostgreSQLからの移行相談・Accessからの移行アセスメント

・Oracle Database バージョンアップ支援・Oracle Developer/2000 Webアップグレード相談

・パフォーマンス・クリニック・Oracle Database 構成相談

・Oracle Database 高可用性診断・システム連携アセスメント・システムセキュリティ診断

・簡易業務診断

無償技術サービスOracle Direct Concierge

http://www.oracle.com/lang/jp/direct/services.html

Page 12: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 12

Javaスレッドダンプの重要性

• スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切り取ったスナップショットのスタックトレース情報です。

• スレッドダンプはJava VMに標準で付属している機能です。WebLogic以外のjavaの障害解析においても有効です。

• テキスト形式で標準出力もしくは標準エラーに出力されます。

• 数秒~数十秒間隔で複数回取得することでサーバの動きを確認することができます。

• 標準出力と標準エラーはファイルにリダイレクトしておくことをお勧めします。

障害発生時における解析において非常に重要な情報となります。WLSやアプリケーションに問題が発生した場合には、必ず取得するようにしましょう

Page 13: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

Javaスレッドダンプの取得例

13

===== FULL THREAD DUMP ===============

Mon Mar 15 15:34:10 2010

BEA JRockit(R) R27.6.2-20_o-108500-1.6.0_05-20090120-1116-windows-ia32

"Main Thread" id=1 idx=0x4 tid=1756 prio=5 alive, in native, waiting

-- Waiting for notification on: weblogic/t3/srvr/T3Srvr@0x1335F378[fat lock]

at KiFastSystemCallRet+0()@0x7C94E514

at WaitForSingleObject+18()@0x7C802542

at ptWaitForEvent+29(platformevent_windows.c:62+0)@0x0058F99D

at tsiWaitForSignalForever+44(signaling.c:44+0)@0x005BB51C

at tsiWaitForSignal+33(signaling.c:63+9)@0x005BB7E1

at tsiWaitForLockSignal+27(signaling.c:120+23)@0x005BB90B

at tsWaitForJavaLockSignal+43(signaling.c:180+0)@0x005BB97B

at RJNI_jrockit_vm_Threads_waitForNotifySignal+28(rnithreads.c:60+0)@0x005AE65C

at stubsCallC2JavaStub+38(stubs_x86.c:66+0)@0x005DF866

at callC2Java+788(rnicall.c:185+0)@0x005A5AD4

at call_java+205(jnimethod.c:234+33)@0x004E723D

at jniCallStaticIntMethodV+54(jnimethod.c:805+0)@0x004E8416

at xjniCallStaticIntMethod+67(jni.c:274+67)@0x004CDED3

at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)

at java/lang/Object.wait(J)V(Native Method)

at java/lang/Object.wait(Object.java:485)

at weblogic/t3/srvr/T3Srvr.waitForDeath(T3Srvr.java:849)

^-- Lock released while waiting: weblogic/t3/srvr/T3Srvr@0x1335F378[fat lock]

at weblogic/t3/srvr/T3Srvr.run(T3Srvr.java:465)

at weblogic/Server.main(Server.java:67)

at jrockit/vm/RNI.c2java(IIIII)V(Native Method)

-- end of trace

Locked ownable synchronizers:

- None

"(Signal Handler)" id=2 idx=0x8 tid=2440 prio=5 alive, in native, daemon

at KiFastSystemCallRet+0()@0x7C94E514

at WaitForSingleObject+18()@0x7C802542

at sigiWaitForNotification+17(signalhandler_win32.c:139+10)@0x005BB1E1

at sigiWaitForSignal+40(signalhandler.c:134+0)@0x005BAC28

at sigiSignalHandlerThread+10(signalhandler.c:166+0)@0x005BACBA

at tsiCallStartFunction+63(lifecycle.c:217+7)@0x0052874F

at tsiThreadStub+320(lifecycle.c:984+0)@0x005294F0

at ptiThreadStub+55(platformthread_windows.c:64+10)@0x00590EA7

at GetModuleFileNameA+442()@0x7C80B729

Lock: 'MemLeak Interactive Lock' (0x00691750)

| Unlocked

Lock: 'MemLeak LargestArrays Hook' (0x0069182C)

| Unlocked

Lock: 'MemLeak Server State' (0x006919E4)

| Unlocked

Lock: 'MemLeak Sockets' (0x00691984)

| Unlocked

Lock: 'MemLeak TypesPointTo Hook' (0x00691800)

| Unlocked

Lock: 'MemLeak Write Queue' (0x006919B4)

| Unlocked

Lock: 'Native Code Modification' (0x00693054)

| Unlocked

Lock: 'Native Lock Profiling' (0x00693C68)

| Held by: "(Attach Listener)" id=7 idx=0x24 tid=456

Lock: 'Periodic Task Lock' (0x00696290)

| Held by: "(VM Periodic Task)" id=6 idx=0x20 tid=3112

Lock: 'Raw Monitor: jmapi eventlock' (0x244E9978)

| Unlocked

| Waiting for notification:

| "JMAPI event thread" id=18 idx=0x48 tid=216

Lock: 'Stacktrace Print Lock' (0x006677AC)

| Unlocked

Lock: 'Thread System: Sampling Callbacks' (0x0069A5AC)

| Unlocked

Lock: 'Thread System: Stop Java' (0x006BB5E8)

| Held by: "(Attach Listener)" id=7 idx=0x24 tid=456

Lock: 'Thread System: Thread Table' (0x006BB684)

| Held by: "(Attach Listener)" id=7 idx=0x24 tid=456

| Blocked acquiring:

| "(VM Periodic Task)" id=6 idx=0x20 tid=3112

Lock: 'Thread System: Weak Thread Map' (0x006BB6C4)

| Unlocked

Lock: 'Typegraph' (0x006BB7D4)

| Unlocked

Lock: 'Zip Lock' (0x006BB824)

| Unlocked

Lock: 'iString Allocation' (0x0069ACD0)

| Unlocked

===== END OF THREAD DUMP ===============

Page 14: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 14

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

UNIXプラットフォームの場合• # kill -3 <PID>

Windowsプラットフォームの場合• コマンドプロンプト上でCtrl-Breakキー

WebLogic Scripting Toolを利用する場合• % threadDump(“hogehoge/dump.out”)

1

2

3

Page 15: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

スレッドダンプの見方

スタックトレースの抜粋

"[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'" id=22 idx=0x4ctid=2928 prio=5 alive, in native,

sleeping, native_waiting, daemon

at java/lang/Thread.sleep(J)V(Native Method)

at jsp_servlet/__threadname._jspService(__threadname.java:82)

at weblogic/servlet/jsp/JspBase.service(JspBase.java:34)

at weblogic/servlet/internal/StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)

at weblogic/servlet/internal/StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:292)

at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:175)

at weblogic/servlet/internal/WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498)

at weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

at weblogic/security/service/SecurityManager.runAs(Lweblogic/security/acl/internal/AuthenticatedSubject;Lweblogic/

security/acl/internal/AuthenticatedSubject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;(Unknown Source)

at weblogic/servlet/internal/WebAppServletContext.securedExecute(WebAppServletContext.java:2180)

at weblogic/servlet/internal/WebAppServletContext.execute(WebAppServletContext.java:2086)

at weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1406)

at weblogic/work/ExecuteThread.execute(ExecuteThread.java:201)

at weblogic/work/ExecuteThread.run(ExecuteThread.java:173)

at jrockit/vm/RNI.c2java(IIIII)V(Native Method)

-- end of trace

現在処理中のメソッド

スレッド名

下にいくほど、

呼び出し元になります

現在処理中のメソッドを

呼び出しているクラス

Page 16: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 16

WLSのスレッドアーキテクチャ

Oracle WebLogic

リクエスト実行スレッドソケットリーダスレッドListenスレッド

7001

Port

バックログ

Muxer

キュー

WebApp A

ワークマネージャ

WebApp B

EJB A

スレッドプール

Page 17: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.17

WLSスレッドとスレッドダンプの対応表

WLSのスレッド スレッドダンプで取得した際の

スレッド名

実行スレッド weblogic.kernel.Default (self-tuning)

ソケットリーダースレッド weblogic.socket.Muxer

Listenスレッド DynamicListenThread[Default]

Page 18: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 18

スレッドダンプから分かること

• 問題発生時のスレッドダンプを調査することにより、アプリのハングや実行時間がスローダウンした場合の原因をつかむ手がかりとなります。

• 全てのスレッドの状態遷移がない→ プロセスハング

• スレッドの処理が少しづつ進んでいる→ スローダウン

• プロセスハング、スローダウン、CPU100%問題などの対応にあたっては、必ずスレッドダンプを取った上でサポート部へ問い合わせてください。

Page 19: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

スレッドダンプ採取の間隔

5~10秒間隔で複数回のスレッドダンプを取得してください。

一定間隔で取得することで、アプリケーションの進行状況が把握出来ます。

スレッドダンプを取得する間隔が 5~10秒おきとか、表現があいまいなのはなぜ?

アプリケーションの処理が滞る時間に依存する為です。

例えば、①の間隔では、問題となっている処理のスレッドを取得出来ません。

時間軸

① ①② ② ②

スレッドダンプ取得

のタイミング

問題となっている処理を実行中

Page 20: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 20

アジェンダ

• はじめに

• 障害時に取得するWLSのログ情報

• Javaスレッドダンプの重要性

• 典型的なトラブルの事例とその解決方法

• Advanced Customer

Servicesのご紹介・SQL Serverからの移行アセスメント

・MySQLからの移行相談・PostgreSQLからの移行相談・Accessからの移行アセスメント

・Oracle Database バージョンアップ支援・Oracle Developer/2000 Webアップグレード相談

・パフォーマンス・クリニック・Oracle Database 構成相談

・Oracle Database 高可用性診断・システム連携アセスメント・システムセキュリティ診断

・簡易業務診断

無償技術サービスOracle Direct Concierge

http://www.oracle.com/lang/jp/direct/services.html

Page 21: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

典型的なトラブルの事例-サーバハング-

• 切り分けのポイント• デッドロックもしくはロックチェーンの調査• スレッドダンプが取得できない場合は、ほぼ JVM 自身でハング

• 取得すべき情報とその目的• Java プログラム上のメソッドか、JVM でハングしているか切り分け• Java プログラムの場合

• スレッドダンプ• Java スタックからデッドロック、ロックチェーンを形成しているスレッドの調査

• JVM の場合• スレッドダンプ• gcore、strace'Linux(• windbg、userdump'Windows(• Native スタックの調査

• 参考'一般的なサーバハング(http://support.oracle.co.jp/bea/support_patterns-ja/Generic_Server_Hang_Pattern.html

Page 22: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

典型的なトラブルの事例-サーバハング-

• スレッドダンプからの解析'ロックチェーン(

"ExecuteThread: '14' for queue: 'weblogic.kernel.Default'" id=26 idx=0x34 tid=1376 prio=5 alive, in native, blocked, daemon

-- Blocked trying to get lock: java/lang/Class@0x60A744C8[thin lock]

at jrockit/vm/Threads.sleep(I)V(Native Method)

at jrockit/vm/Locks.waitForThinRelease(Ljava/lang/Object;I)I(Unknown Source)

at staplerz/common/Lazybones.getName()Ljava/lang/String;(Lazybones.java:9)

at staplerz/servlets/GenericServerHang.service…

"ExecuteThread: '13' for queue: 'weblogic.kernel.Default'" id=25 idx=0x32 tid=6664 prio=5 alive, in native, sleeping, daemon

-- Waiting for notification on: java/lang/Object@0x60A779A0[fat lock]

at jrockit/vm/Threads.waitForSignal(J)Z(Native Method)

at java/lang/Object.wait(J)V(Native Method)

at java/lang/Thread.sleep(J)V(Unknown Source)

^-- Lock released while waiting: java/lang/Object@0x60A779A0[fat lock]

at staplerz/common/Lazybones.getName()Ljava/lang/String;(Lazybones.java:9)

^-- Holding lock: java/lang/Class@0x60A744C8[thin lock]

at staplerz/servlets/GenericServerHang.service…

blockedのスレッドを探すjava/lang/Class@0x60A744C8 の

ロックを取得しようと待ち状態となっている

同じ Object ID のロックを保持している

このメソッドで停止している

'本例は、sleep しているだけ(

Page 23: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

典型的なトラブルの事例-サーバハング-

• スレッドダンプからの解析'デッドロック(

"ExecuteThread: '37' for queue: 'weblogic.kernel.Default'" id=48 idx=0x66 tid=3188 prio=5 alive, in native, blocked, daemon

-- Blocked trying to get lock: oracle/jdbc/driver/OracleConnection@0x037DE690[thin lock]

at jrockit/vm/Threads.sleep(I)V(Native Method)

at jrockit/vm/Locks.waitForThinRelease(Ljava/lang/Object;I)I(Unknown Source)[optimized]

^-- Holding lock: oracle/jdbc/xa/client/OracleXAConnection@0x01C9D9C0[thin lock]

at weblogic/jdbc/wrapper/XAConnection.getConnection()Ljava/sql/Connection;(XAConnection.java:458)

"ExecuteThread: '34' for queue: 'weblogic.kernel.Default'" id=45 idx=0x60 tid=3624 prio=5 alive, in native, blocked, daemon

-- Blocked trying to get lock: oracle/jdbc/xa/client/OracleXAConnection@0x01C9D9C0[thin lock]

at jrockit/vm/Threads.sleep(I)V(Native Method)

at oracle/jdbc/driver/OracleConnection.logicalClose()V(OracleConnection.java:2968)

^-- Holding lock: oracle/jdbc/driver/OracleConnection@0x037DE690[recursive]

at oracle/jdbc/driver/OracleConnection.close()V(OracleConnection.java:1486)

blockedのスレッドを探すOracleConnection@0x037DE690

のロックを取得しようと待ち状態となっている

OracleConnection@0x037DE690

のロックを保持している

OracleXAConnection@0x01C9D9C0

のロック取得待ち

OracleXAConnection@0x01C9D9C0

のロックを保持している

Page 24: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

典型的なトラブルの事例-スローレスポンス-

• 切り分けのポイント: • 処理時間が遅延するだけで、処理自体は進行するため切り分けが難しい• 再現環境により繰り返しテストを行い、多くの情報取得が重要• このような場合、JRockit Runtime Analyzerによる解析も非常に有効

• 取得すべき情報とその目的• 頻繁に呼ばれているメソッドの処理に問題がないかソースから調査

• スレッドダンプ• Native 側で頻繁に呼ばれている関数の処理に問題がないかソースから調査

• gcore

• システムコールが呼ばれた回数、処理時間の確認• strace –c

• メモリ、CPU、ディスク使用率等の情報• ps、top、vmstat

• パケットキャプチャにより、ネットワークに問題がないか確認• tcpdump、etherreal

Page 25: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

典型的なトラブルの事例-スローレスポンス-

• スレッドダンプの例1

"ExecuteThread: '17' for queue: 'EjbApp'" id=29 idx=0x40 tid=27144 prio=5 alive, daemon

at java/util/WeakHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;(WeakHashMap.java:396)

at jrockit/reflect/InvocationCompiler.put(Ljava/lang/reflect/AccessibleObject;Ljrockit/reflect/CompiledCode;)V(Unknown Source)

at

jrockit/reflect/InvocationCompiler.codeFor(Ljava/lang/reflect/AccessibleObject;Ljava/lang/Class;)Ljrockit/reflect/CompiledCode;(Unknown

Source)

at jrockit/reflect/InvocationCompiler.compileInvoker(Ljava/lang/reflect/Method;)Ljrockit/reflect/MethodInvoker;(Unknown Source)

at jrockit/reflect/MethodInvoker.compileInvoker()Ljrockit/reflect/MethodInvoker;(Unknown Source)

at jrockit/reflect/NativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)

at jrockit/reflect/VirtualNativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)

at java/lang/reflect/Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;I)Ljava/lang/Object;(Unknown Source)

at

org/apache/commons/beanutils/PropertyUtilsBean.invokeMethod(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)

Ljava/lang/Object;(PropertyUtilsBean.java:1773)

幾つかのスレッドダンプにおいて java/util/WeakHashMap.put() で処理が停滞しているスタックが見受けられるが、Lock 待ちのようなスタックは見当たらない。

Page 26: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

典型的なトラブルの事例-スローレスポンス-

• スレッドダンプの例2

"[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x004706f8 nid=0xb runnable [0xf2c7e000..0xf2c7fc48]

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.read(SocketInputStream.java:129)

at oracle.net.ns.Packet.receive(Unknown Source)

at oracle.net.ns.DataPacket.receive(Unknown Source)

at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)

at oracle.net.ns.NetInputStream.read(Unknown Source)

at oracle.net.ns.NetInputStream.read(Unknown Source)

at oracle.net.ns.NetInputStream.read(Unknown Source)

at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:979)

at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:951)

at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:435)

at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185)

at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:503)

at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:951)

at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:535)

at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1046)

at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2905)

at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:2946)

- locked <0xac8d7510> (a oracle.jdbc.driver.T4CPreparedStatement)

- locked <0xb606b0d0> (a oracle.jdbc.driver.T4CConnection)

at weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:100)

at jsp_servlet._jdbc.__jdbc._jspService(__jdbc.java:121)

at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)

全てのスレッドダンプにおいて java/net/SocketInputStream.socketRead0() で処理が停滞している。呼び出し元がJDBCドライバのためDBからの応答待ちがない状態。

Page 27: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 27

アジェンダ

• はじめに

• 障害時に取得するWLSのログ情報

• Javaスレッドダンプの重要性

• 典型的なトラブルの事例とその解決方法

• Advanced Customer

Servicesのご紹介・SQL Serverからの移行アセスメント

・MySQLからの移行相談・PostgreSQLからの移行相談・Accessからの移行アセスメント

・Oracle Database バージョンアップ支援・Oracle Developer/2000 Webアップグレード相談

・パフォーマンス・クリニック・Oracle Database 構成相談

・Oracle Database 高可用性診断・システム連携アセスメント・システムセキュリティ診断

・簡易業務診断

無償技術サービスOracle Direct Concierge

http://www.oracle.com/lang/jp/direct/services.html

Page 28: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.28

Oracle Advanced Customer Services

• お客様のプロジェクトに対して、Service Delivery Managerを主軸とする専用のサポートアカウントチームを編成し、オラクルのエキスパートがお客様システムの運用保守を支援します。

• Service Delivery Managerはお客様から見たオラクルのサポートへの直接の窓口となります。あらゆる障害や問い合わせに対して迅速に対応します。

• プロジェクト担当者様とは密に連携させて頂き、月次報告をさせて頂きます。また、オラクル製品の重要障害情報なども事前に提供することが可能となります。

Page 29: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

ACS packaged service offerings

パフォーマンスアセスメント・最適化サービス

オラクルエキスパートによるバーチャルサポートセンタの設置

担当エンジニアのアサイン

プロアクティブサポート

SRの優先対応

エスカレーションマネージメント

Service Delivery

Managerのアサイン

リモート/オンサイトでのエキスパートによるスポットサービス

SRの優先対応

エスカレーションマネージメント

Service Delivery Managerのアサイン

選任エンジニアリングチームへのコンタクト

プロアクティブサポート

SRの優先対応

エスカレーションマネージメント

Service Delivery

Managerのアサイン

Assisted

Service

SolutionSupport

Center

Priority

Service

Business

Critical

Assistance

Personalized

SupportFaster

Problem

ResolutionProactive

Problem

Avoidance Continual

Operational

Improvement

Page 30: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.30

Main ACS packaged services

• Business Critical Assistance

• Service Delivery Managerのアサイン

• エスカレーションマネージメント、シチュエーションマネージメント

• プロアクティブサポート

• 選任エンジニアリングチームのアサイン

• 月次定例、SR棚卸、よろず相談

• Assisted Service

• オラクルのエキスパートによるスポットサービスの提供

• パフォーマンス・アセスメント提供

• コンフィグレーション・アセスメント提供

• オンサイトでの障害対応サービス

Page 32: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.32

3月に3つダイセミを受講してプレゼントを当てよう

3月開催のダイセミのうち3つ以上受講頂いた皆様の中から素敵なプレゼントが当たるキャンペーンを実施します!

応募方法 [email protected]

必要情報を明記のうえ、下記宛てにメールでご応募ください。セミナお申し込み時にご登録されている貴社住所宛てに発送させていただきます。当選者の発表は発送をもってかえさせて頂きます。

タイトル:「春だ!リピータープレゼント応募」必要情報:1、ご登録のお名前 2、ご登録の貴社名、部署名

3、受講された3月のダイセミタイトル3つ以上4、ダイセミに対するご意見、ご検討中の案件情報など

※ご登録情報が正しくない場合はご応募が無効となりますのでご注意ください。当キャンペーン実施内容は予告なく変更になる可能性があります。

Page 33: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 33

OTN×ダイセミ でスキルアップ!!

※OTN掲示版は、基本的にOracleユーザー有志からの回答となるため100%回答があるとは限りません。ただ、過去の履歴を見ると、質問の大多数に関してなんらかの回答が書き込まれております。

Oracle Technology Network(OTN)を御活用下さい。

・技術的な内容について疑問点を解消したい!・一般的なその解決方法などを知りたい!・セミナ資料など技術コンテンツがほしい!

技術的な疑問点は、OTN掲示版の

「Oracle WebLogic Server」へ

http://otn.oracle.co.jp/forum/index.jspa?categoryID=2

過去のセミナ資料、動画コンテンツはOTNの

「OTNセミナー オンデマンド コンテンツ」へ

http://www.oracle.com/technology/global/jp/ondemand/otn-seminar/index.html

※ダイセミ事務局にダイセミ資料を請求頂いても、お受けできない可能性がございますので予めご了承ください。ダイセミ資料はOTNコンテンツ オン デマンドか、セミナ実施時間内にダウンロード頂くようお願い致します。

Page 34: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 34

OTNセミナー オンデマンド コンテンツ期間限定にて、ダイセミの人気セミナーを動画配信中!!

ダイセミのライブ感はそのままに、お好きな時間で受講頂けます。

※掲載のコンテンツ内容は予告なく変更になる可能性があります。期間限定での配信コンテンツも含まれております。お早めにダウンロード頂くことをお勧めいたします。

OTN オンデマンド

Page 35: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved.

オラクル クルクルキャンペーン

35

Enterprise Editionはここが違う!!

•圧倒的なパフォーマンス!

•データベース管理がカンタン!

•データベースを止めなくていい!

• もちろん障害対策も万全!

Oracle Databaseのライセンス価格を大幅に抑えて

ご導入いただけます

詳しくはコチラ

http://www.oracle.co.jp/campaign/kurukuru/index.html

あのOracle Database Enterprise Editionが超おトク!!

お問い合わせフォームhttp://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28

多くのお客様でサーバー使用期間とされる

5年間にライセンス期間を限定

•期間途中で永久ライセンスへ差額移行

• 5年後に新規ライセンスを購入し継続利用

• 5年後に新システムへデータを移行

Page 36: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 36

http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28

Oracle Direct 検索

あなたにいちばん近いオラクル

Oracle Directまずはお問合せください

Web問い合わせフォーム フリーダイヤル

専用お問い合わせフォームにてご相談内容を承ります。

※フォームの入力には、Oracle Direct Seminar申込時と同じログインが必要となります。

※こちらから詳細確認のお電話を差し上げる場合がありますので、ご登録されている連絡先が最新のものになっているか、ご確認下さい。

0120-155-096

※月曜~金曜 9:00~12:00、13:00~18:00

'祝日および年末年始除く(

システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。

システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

Page 37: Oracle Direct Seminar · •WebLogic Serverがクラッシュしcoreをはく ... •典型的なトラブルの事例とその解決方法 ... •スレッドダンプとは、動作中のJVMの各スレッドにおける「瞬間」を切

Copyright© 2010, Oracle. All rights reserved. 37

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

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