サポートエンジニアが語る。WebLogic Server...

117
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | サポートエンジニアが語る。 WebLogic Server リクエスト処理フロー見える化! 58 WebLogic Server 勉強会@東京 日本オラクル株式会社 Fusion Middleware 製品サポート 健太郎 (Azuma, Kentaro) 2016 7 21

Transcript of サポートエンジニアが語る。WebLogic Server...

Page 1: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

サポートエンジニアが語る。 WebLogic Server リクエスト処理フロー見える化! 第 58 回 WebLogic Server 勉強会@東京

日本オラクル株式会社 Fusion Middleware 製品サポート 東 健太郎 (Azuma, Kentaro) 2016 年 7 月 21 日

Page 2: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

2

Page 3: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Program Agenda

はじめに

検証アプリケーションの動作シナリオ説明

各ポイントでの見える化実践

Java Flight Recorder からの見える化

まとめ

1

2

3

4

5

3

Page 4: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Program Agenda

はじめに

検証アプリケーションの動作シナリオ説明

各ポイントでの見える化実践

Java Flight Recorder からの見える化

まとめ

1

2

3

4

5

4

Page 5: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

日々、サポートへいろいろな問い合わせがあります

•サーバが応答しません

• アプリと DB は問題ないはずなので、WLS がだめみたいです

• トランザクションが動いていないみたいです

• WLS ってどんなふうに動いていますか?

5

Page 6: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

私たちも特別なツールは持っていません

•一般のツールやコマンドなどを使って問題の調査をします

•欲しい情報が得られるように工夫しています

• デバッグログやダンプなどとじっくり向き合う地味な作業もあります・・・

6

Page 7: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

見える化しましょう

•製品サポートの経験から得られたいくつかの有用な Tips を共有します

• WebLogic Server (WLS) のこんな処理フローも見えるようになります

7

–HTTP (SOAP) リクエスト / レスポンス

–Web サービス (JAX-WS サーブレット)

–Enterprise Java Beans (EJB)

– Java Persistence API (JPA)

–トランザクション (JTA)

–データソース / JDBC ドライバ / データベース

Page 8: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

こんな人たちに聞いてほしいです

• WLS や Java EE について基本的な理解があるエンジニア

• WLS 上で動く Java EE アプリの開発をしている方や、これから始める方

•製品サポートへ WLS についての SR を登録する機会のある方

•今後の問題調査やトラブルシュートに役立てて頂けると嬉しいです!

8

Page 9: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Program Agenda

はじめに

検証アプリケーションの動作シナリオ説明

各ポイントでの見える化実践

Java Flight Recorder からの見える化

まとめ

1

2

3

4

5

9

Page 10: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

使用したソフトウェア / 仕様のバージョン

• Oracle WebLogic Server 12.2.1.0.0 – JDBC Thin Driver 12.1.0.2.0

• Java SE 1.8.0_66 – Java Flight Recorder 5.5.0

• Java EE 7.0 – Servlet 3.0

– JAX-WS 2.0

– EJB 3.0

– JPA 2.0

• Oracle JDeveloper 12.2.1.0.0

• Oracle Database 11.2.0.4.0

10

Page 11: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

リクエスト処理フローの全体図

11

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

SOAP Client (soapUI)

Database

Page 12: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

トランザクションの境界

12

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

EJB から Database まで

SOAP Client (soapUI)

Page 13: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

ECID で関連づけできる範囲

13

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Client から Database まですべて

SOAP Client (soapUI)

Page 14: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

ECID って?

• Execution Context ID (実行コンテキスト ID)

• WLS や Database を流れるリクエストを一意に識別できる識別子

• フォーマットの例 : 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020

• ECID に着目することで、リクエストの流れを紐付けて追うことができます

14

※ 参考情報 [Java, WLS, FMW] Using Diagnostic Context for Correlation (日本語) https://orablogs-jp.blogspot.jp/2015/12/using-diagnostic-context-for-correlation.html 12.5.1 メッセージの関連付けでのECIDおよびRIDの理解 http://docs.oracle.com/cd/E72987_01/core/ASADM/logs.htm#CIHDHJIG

Page 15: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

リクエスト処理シーケンス

15

Data Source

SQL Insert

lock table ...

Web Service EJB JTA JDBC

SOAP Client rollback

Oracle Database

JPA

SOAP Request

SOAP Response

Rollback 実行まで、 SQL Insert 文はブロックされる

Page 16: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Program Agenda

はじめに

検証アプリケーションの動作シナリオ説明

各ポイントでの見える化実践

Java Flight Recorder からの見える化

まとめ

1

2

3

4

5

16

Page 17: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) リクエスト / レスポンスの確認

17

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 18: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) リクエスト・ヘッダの確認 [soapUI] : [Request] –> [Raw (tab)]

18

Page 19: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) リクエスト・ボディの確認 [soapUI] : [Request] –> [XML (tab)]

19

COMM = 900 DEPTNO = 30 EMPNO = 9999 ENAME = SHERYL HIREDATE = 1986-07-31T00:00:00+09:00 JOB=SALESMAN MGR=7698 SAL=2000

Page 20: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) レスポンス・ヘッダの確認 [soapUI] : [Response] -> [Raw (tab)]

20

Page 21: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) レスポンス・ボディの確認. [soapUI] : [Response] -> [XML (tab)]

21

Page 22: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

データベースに Insert / Commit されたデータの確認

22

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 23: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

データベースに Insert / Commit されたデータの確認. [SQL*Plus] : 検証アプリケーション実行後の SELECT 結果

23

SQL> SELECT * FROM scott.emp ORDER BY empno DESC; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------- -------- --------- ------ ------------------- ------ ------ -------- 9999 SHERYL SALESMAN 7698 1986-07-31/00:00:00 2000 900 30 7934 MILLER CLERK 7782 1982-01-23/00:00:00 1300 10 7902 FORD ANALYST 7566 1981-12-03/00:00:00 3000 20 ... ...

Page 24: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) リクエスト / レスポンスのパケットを確認

24

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 25: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) リクエスト / レスポンスのパケットを確認 [Wireshark] : [packet list pane]

25

SOAP リクエスト・ヘッダ SOAP リクエスト・ボディ

...

SOAP レスポンス・ヘッダ SOAP レスポンス・ボディ

Page 26: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) リクエスト・ヘッダのパケットを確認 [Wireshark] : [packet bytes pane]

26

Page 27: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) リクエスト・ボディのパケットを確認 [Wireshark] : [packet bytes pane]

27

Page 28: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) レスポンス・ヘッダのパケットを確認 [Wireshark] : [packet bytes pane]

28

Page 29: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP (SOAP) レスポンス・ボディのパケットを確認 [Wireshark] : [packet bytes pane]

29

Page 30: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Wireshark を使ったパケットダンプの取得

•パケットキャプチャの開始ウィザードを起動する

30

※ 参考情報 Wireshark https://www.wireshark.org/

Page 31: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

tcpdump を使ったパケットダンプの取得.

• tcpdump コマンドを実行する

31

※ 参考情報 【tcpdump】ネットワークトラフィックをダンプ出力する http://itpro.nikkeibp.co.jp/article/COLUMN/20140512/556024/?rt=nocnt

$ su – # tcpdump -i eth0 -w packetdump.dmp tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes ... ^C 42 packets captured 44 packets received by filter 0 packets dropped by kernel

※ バイナリ (-w) で出力することで、パケットダンプを Wireshark で解析できます

Page 32: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP Server を流れるリクエストを確認

32

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 33: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP アクセスログの確認 [access.log]

33

#Version: 1.0 #Fields: c-ip s-ip date time cs-method cs-uri sc-status bytes time-taken ctx-ecid ctx-rid #Software: WebLogic # Start-Date: 2016-06-27 11:59:49 ... 10.188.146.159 10.185.152.210:8001 2016-06-27 11:59:49 POST /SampleClient/SessionEJBWebServicePort 200 458 23.357 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 0 ... ECID も出力することができる

Page 34: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP アクセスログの設定 [WLS Console] : [Servers] –> [<server-name>] –> [Logging] –> [HTTP]

34

...

c-ip s-ip date time cs-method cs-uri sc-status bytes time-taken ctx-ecid ctx-rid

※ 参考情報 12.1.1 Oracle Fusion Middleware HTTPアクセス・ロギングの理解 http://docs.oracle.com/cd/E72987_01/core/ASADM/logs.htm#CIHEHEEB

拡張ログ・フォーマット

Page 35: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP デバッグログから HTTP リクエスト・ヘッダを確認 [DebugHttp] : HTTP Request Header

35

※ 実際は 1 行

####<Jun 27, 2016 11:59:26 AM JST> <Debug> <Http> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> <1466996366184> ... invoking servlet for : weblogic.servlet.internal.ServletRequestImpl@599a3e95[ POST /SampleClient/SessionEJBWebServicePort HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: application/soap+xml;charset=UTF-8 Content-Length: 533 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5) ]>

Server Log

Page 36: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTP デバッグログから HTTP レスポンス・ヘッダを確認 [DebugHttp] : HTTP Response Header

36

※ 実際は 1 行

####<Jun 27, 2016 11:59:49 AM JST> <Debug> <Http> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <Response committed. request: 'HttpRequest@1503280789 - /SampleClient/SessionEJBWebServicePort' response: weblogic.servlet.internal.ServletResponseImpl@2a4a4ced[ HTTP/1.1 200 OK Date: : Mon, 27 Jun 2016 02:59:26 GMT Content-Length: : 458 Content-Type: : application/soap+xml; charset=utf-8 X-ORACLE-DMS-ECID: 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 X-ORACLE-DMS-RID: 0 ]>

Server Log

Page 37: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

HTTPデバッグログの設定. [WLS Console] : [Servers] –> [<server-name>] –> [Debug]

37

...

※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)

...

Page 38: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Web サービス (Servlet + JAX-WS) を流れるリクエストを確認

38

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 39: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Servlet フィルタを使って HTTP リクエストを確認

39

### SessionEJBWebServiceFilter.doFilter - Started ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ HTTP Request Headers ------------------------ Content-Type : application/soap+xml;charset=UTF-8 Content-Length : 533 Host : 10.185.152.210:8001 ------------------------ HTTP Request Body ------------------------ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:cli="http://client/"> <soap:Header/> <soap:Body> <cli:persistEmp><arg0> ... <empno>9999</empno> <ename>SHERYL</ename> ... </arg0></cli:persistEmp> </soap:Body> </soap:Envelope>

Stdout Log

Page 40: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Servlet フィルタを使って HTTP レスポンスを確認

40

### SessionEJBWebServiceFilter.doFilter - Finished ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ HTTP Response Headers ------------------------ X-ORACLE-DMS-ECID : 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 X-ORACLE-DMS-RID : 0 ------------------------ HTTP Response Body ------------------------ <S:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <env:Header/> <S:Body> <ns0:persistEmpResponse xmlns:ns0="http://client/"><return> ... <empno>9999</empno> <ename>SHERYL</ename> ... </return></ns0:persistEmpResponse> </S:Body> </S:Envelope>

Stdout Log

Page 41: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Servlet フィルタの設定 [SessionEJBWebServiceFilter.java] : Servlet フィルタ実装クラス

41

@WebFilter(filterName = "WebServiceFilter", servletNames = { "SessionEJBWebServicePort" }) public class SessionEJBWebServiceFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) ... { System.out.println("### SessionEJBWebServiceFilter.doFilter - Started ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); printRequestHeaders(req); printRequestBody(req); chain.doFilter(req, res); // <-- ここで Servlet を実行する System.out.println("### SessionEJBWebServiceFilter.doFilter - Finished ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); printResponseHeaders(res); printResponseBody(res); }

weblogic.diagnostics.context.DiagnosticContextHelper.getContextId()

※ 参考情報 javax.servlet.annotation Annotation Type WebFilter https://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebFilter.html

Page 42: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

アプリケーションでの ECID 文字列の取得

• DiagnosticContextHelper.getContextId() で ECID 文字列を取得できる

•サーバの診断コンテキストを有効化しておく必要がある

42

※ 参考情報 [WLS] WebLogic Server?Use the Execution Context ID in Applications?Lessons From Hansel and Gretel (日本語) https://orablogs-jp.blogspot.jp/2011/06/weblogic-serveruse-execution-context-id.html weblogic.diagnostics.context Class DiagnosticContextHelper http://docs.oracle.com/middleware/1221/wls/WLAPI/weblogic/diagnostics/context/DiagnosticContextHelper.html

[WLS Console] : [Diagnostics] –> [Context]

Page 43: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SOAP メッセージハンドラを使って SOAP リクエストを確認

43

### SessionEJBSOAPHandler.handleMessage ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ SOAP Inbound (Request) Envelope ------------------------ <soap:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:cli="http://client/"> <soap:Header/> <soap:Body> <cli:persistEmp><arg0> ... <empno>9999</empno> <ename>SHERYL</ename> ... </arg0></cli:persistEmp> </soap:Body> </soap:Envelope>

Stdout Log

Page 44: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SOAPメッセージハンドラを使って SOAP レスポンスを確認

44

### SessionEJBSOAPHandler.handleMessage ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ SOAP Outbound (Response) Envelope ------------------------ <S:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <env:Header/> <S:Body> <ns0:persistEmpResponse xmlns:ns0="http://client/"><return> ... <empno>9999</empno> <ename>SHERYL</ename> ... </return></ns0:persistEmpResponse> </S:Body> </S:Envelope>

Stdout Log

Page 45: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SOAP メッセージハンドラの設定 (1) [SessionEJBSOAPHandler.java] : SOAP ハンドラ実装クラス

45

※ 実際は 1 行

public class SessionEJBSOAPHandler implements SOAPHandler<SOAPMessageContext> { @Override public boolean handleMessage(SOAPMessageContext context) { System.out.println("### SessionEJBSOAPHandler.handleMessage ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); // ... SOAPMessage soapMessage = context.getMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); System.out.println("------------------------ SOAP " + direction + " Envelope ------------------------"); System.out.println(soapEnvelope); } ※ 参考情報

18 SOAPメッセージ・ハンドラの作成と使用 http://docs.oracle.com/cd/E72987_01/wls/WSGET/jax-ws-soaphandlers.htm javax.xml.ws.handler.soap Interface SOAPHandler<T extends SOAPMessageContext> https://docs.oracle.com/javaee/7/api/javax/xml/ws/handler/soap/SOAPHandler.html

Page 46: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SOAP メッセージハンドラの設定 (2) [sessionejb-soap-handler-chain.xml] : ハンドラチェイン定義ファイル

46

<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> <handler-chain> <handler> <handler-class>handler.SessionEJBSOAPHandler</handler-class> </handler> </handler-chain> </handler-chains>

Page 47: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SOAP メッセージハンドラの設定 (3).. [SessionEJBWebService.java] : JAX-WS Servlet クラス

47

@WebService(serviceName = "SessionEJBWebService") @HandlerChain(file = "../handler/sessionejb-soap-handler-chain.xml") @BindingType(SOAPBinding.SOAP12HTTP_BINDING) public class SessionEJBWebService { @WebMethod public Emp persistEmp(@WebParam(name = “arg0”) Emp emp) { // ... Emp _emp = sessionEJB.persistEmp(emp); // <-- ここで EJB のメソッドを実行する // ... return _emp; }

Emp 表への永続化のために公開している Web サービスのオペレーション

Page 48: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

EJB (Stateless Session Bean) の処理を確認

48

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 49: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

EJB インターセプタを使って処理するデータを確認

49

### SessionEJBInterceptor.intercept - Started ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ EJB Method Parameters ------------------------ sample.Emp@6e07fada[comm=900,deptno=30,empno=9999,ename=SHERYL,hiredate=Thu Jul 31 00:00:00 JST 1986,job=SALESMAN,mgr=7698,sal=2000] ... ### SessionEJBBean.persistEmp ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ... ### SessionEJBInterceptor.intercept - Finished ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0

EJB メソッド実行中

EJB メソッド実行後

EJB メソッド実行前

Stdout Log

Page 50: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

EJB インターセプタの設定 (1) [SessionEJBInterceptor.java] : EJB インターセプタクラス

50

※ 実際は 1 行

public class SessionEJBInterceptor { @AroundInvoke public Object intercept(InvocationContext context) throws Exception { // ... System.out.println("### SessionEJBInterceptor.intercept - Started ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); System.out.println("------------------------ EJB Method Parameters ------------------------"); for (Object obj : context.getParameters()) { if(obj.getClass().getName().equals("sample.Emp")) System.out.println(((Emp)obj).toString()); } Object result = context.proceed(); // <-- ここで EJB のメソッドを実行する System.out.println("### SessionEJBInterceptor.intercept - Finished ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID());

Page 51: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

EJB インターセプタの設定 (2). [SessionEJBBean.java] : EJB Stateless Session Bean クラス

51

@Stateless(name = "SessionEJB", mappedName = "SessionEJB") @Interceptors(SessionEJBInterceptor.class) public class SessionEJBBean implements SessionEJB, SessionEJBLocal { // ... @TransactionAttribute(TransactionAttributeType.REQUIRED) public Emp persistEmp(Emp emp) { System.out.println("### SessionEJBBean.persistEmp ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); em.persist(emp); // ここで JPA のメソッドを実行する (Database にデータを永続化 (Insert) する) // ... } ※ 参考情報

javax.interceptor Annotation Type AroundInvoke https://docs.oracle.com/javaee/7/api/javax/interceptor/AroundInvoke.html javax.interceptor Annotation Type Interceptors https://docs.oracle.com/javaee/7/api/javax/interceptor/Interceptors.html

Page 52: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

EJB デバッグログから処理を確認 [DebugEjbInvoke]

52

※ 実際は 1 行

####<Jun 27, 2016 11:59:26 AM JST> <Debug> <EjbInvoke> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[BaseRemoteObject] preInvoke called with: ... Method: persistEmp(sample.Emp) TransactionAttribute: REQUIRED on remote interface of EJB: SessionEJB> ####<Jun 27, 2016 11:59:27 AM JST> <Debug> <EjbInvoke> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[BaseRemoteObject] Committing our tx: Name=[EJB sample.SessionEJBBean.persistEmp(sample.Emp)],Xid=BEA1-0000301B662DD776A418(866435730), ...> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <EjbInvoke> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[BaseRemoteObject] Committing our tx: SUCCESS>

トランザクションの開始

トランザクションのコミット成功

トランザクションのコミット開始と XID の確認

Server Log

Page 53: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

EJBデバッグログの設定. [WLS Console] : [Servers] –> [<server-name>] –> [Debug]

53

...

...

...

※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)

Page 54: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

トランザクションを確認

54

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

SOAP Client (soapUI)

Page 55: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

管理コンソールを使用した確認 [WLS Console] : [Servers] -> [<server-name>] –> [Monitoring] –> [JTA] –> [Transactions]

55

...

実行中のトランザクション

Page 56: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

データベース上で実行中のトランザクションを確認 [SQL*Plus]

56

SQL> SELECT globalid, branchid, formatid, state FROM v$global_transaction; GLOBALID BRANCHID FORMATID STATE -------------------- ---------------------------------------- -------- ------ 0000301B662DD776A418 53616D706C6544535F626173655F646F6D61696E 48801 ACTIVE

※ 参考情報 V$GLOBAL_TRANSACTION http://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_1168.htm#sthref3362

WLS 上で確認したトランザクション BEA1-0000301B662DD776A418 に相当

Page 57: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

トランザクションデバッグログを確認 [DebugJTA2PC]

57

####<Jun 27, 2016 11:59:49 AM JST> <Debug> <JTA2PC> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <... : [EJB sample.SessionEJBBean.persistEmp(sample.Emp)]: TX[BEA1-0000301B662DD776A418] preparing-->prepared> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <JTA2PC> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <XAResource[SampleDS_base_domain].commit (xid=BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, ...)> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <JTA2PC> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <... : [EJB sample.SessionEJBBean.persistEmp(sample.Emp)]: TX[BEA1-0000301B662DD776A418] committing-->committed>

Server Log

トランザクションコミット前の準備フェーズ

トランザクションのコミット成功

トランザクションのコミット開始

Page 58: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

トランザクションデバッグログの設定. [WLS Console] : [Servers] –> [<server-name>] –> [Debug]

58

...

...

...

※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)

Page 59: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JPA (EclipseLink) の処理を確認

59

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 60: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JPA (EclipseLink) のデバッグログを確認 [DebugJpaJdbcJdbc, DebugJpaJdbcSql]

60

####<Jun 27, 2016 11:59:27 AM JST> <Debug> <EclipseLink> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[DebugJpaJdbcJdbc] ... --persist() operation called on: sample.Emp@6e07fada[comm=900,deptno=30,empno=9999,ename=SHERYL,hiredate=Thu Jul 31 00:00:00 JST 1986,job=SALESMAN,mgr=7698,sal=2000].> ####<Jun 27, 2016 11:59:27 AM JST> <Debug> <EclipseLink> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[DebugJpaJdbcSql] ... --INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (?, ?, ?, ?, ?, ?, ?, ?) bind => [9999, 900, 30, SHERYL, 1986-07-31, SALESMAN, 7698, 2000]> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <EclipseLink> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[DebugJpaJdbcJdbc] ... --TX afterCompletion callback, status=COMMITTED>

Server Log

永続化 (Insert) 処理の開始

トランザクションのコミット成功

実行 SQL (Insert) 文の確認

Page 61: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JPA (EclipseLink) のデバッグログの設定 (1) [WLS Console] : [Servers] –> [<server-name>] –> [Debug]

61

...

...

...

※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)

Page 62: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JPA (EclipseLink) のデバッグログの設定 (2).. [persistence.xml] : データベースとの設定情報定義ファイル

62

<persistence ... version="2.0"> <persistence-unit name="SamplePU" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>SampleDS</jta-data-source> <class>sample.Emp</class> <properties> <property name="eclipselink.logging.level" value="FINEST"/> <property name="eclipselink.target-server" value="WebLogic_12"/> <property name="eclipselink.target-database" value="Oracle11"/> </properties> </persistence-unit> </persistence>

※ 参考情報 Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 5.1.4 ロギング http://docs.oracle.com/cd/E72987_01/toplink/jpa-extensions-reference/persistenceproperties_ref.htm#sthref733

Page 63: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Data Source が管理するデータベース接続を確認

63

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 64: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

v$session ビューからデータベース接続を確認 [SQL*Plus] : 検証アプリケーション実行直後の SELECT 結果

64

SQL> SELECT s.sid,s.serial#,s.username,s.program,s.machine,s.sql_id,s.prev_sql_id,p.spid,s.ecid,q.sql_text,q.last_active_time 2 FROM v$session s, v$sql q, v$process p 3 WHERE q.sql_id = (CASE WHEN s.sql_id IS NOT NULL THEN s.sql_id ELSE s.prev_sql_id END) 4 and s.username = 'SCOTT' and s.program like '%SampleDS%' and s.paddr = p.addr 5 ORDER BY q.last_active_time DESC; SID SERIAL# USERNAME PROGRAM MACHINE --- ------- -------- -------------------------------- ---------------------- 29 5 SCOTT JDBC Thin - SampleDS on Server-0 kazuma01.jp.oracle.com SQL_ID PREV_SQL_ID SPID ECID ------------- ------------- ---- --------------------------------------------- 1bkaadbg3pq92 1bkaadbg3pq92 4432 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 SQL_TEXT LAST_ACTIVE_TIME ---------------------------------------------------------------------------------------------------- ------------------- INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (:1 , :2 , :3 , :4 , :5 2016-06-27/11:59:48

※ 参考情報 Oracle Databaseリファレンス http://docs.oracle.com/cd/E16338_01/server.112/b56311/toc.htm

Page 65: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Data Source のデバッグログを確認 [JDBCSQL]

65

####<Jun 27, 2016 11:59:27 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... prepareStatement(INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (?, ?, ?, ?, ?, ?, ?, ?))> ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setInt(1, 9999)> ... ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setString(4, SHERYL)> ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setDate(5, 1986-07-31)> ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setString(6, SALESMAN)> ...

Server Log

Page 66: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Data Source のデバッグログの設定 [WLS Console] : [Servers] –> [<server-name>] –> [Debug]

66

...

...

...

※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)

Page 67: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

v$session ビューの PROGRAM 列へ特定の文字列を設定 [WLS Console] : [Services] –> [Data Sources] –> [Configuration] –> [Connection Pool]

67

...

※ 参考情報 [WLS] Setting V$SESSION for a WLS Datasource (日本語) https://orablogs-jp.blogspot.jp/2014/08/setting-vsession-for-wls-datasource.html [WLS, Database, FMW] Data Source System Property Enhancement in WLS 12.2.1 (日本語) https://orablogs-jp.blogspot.jp/2015/11/data-source-system-property-enhancement.html

v$session.program=JDBC Thin - SampleDS on Server-0

Page 68: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

v$session ビューの ECID 列へ ECID 値を設定 (1) [WLS Console] : [Services] –> [Data Sources] –> [Configuration] –> [Diagnostics]

68

...

Driver Interceptor=diag. JDBCDriverInterceptor

※ 参考情報 JDBC Data Source: Configuration: Diagnostics - Driver Interceptor http://docs.oracle.com/cd/E72987_01/wls/WLACH/pagehelp/JDBCjdbcdatasourcesjdbcdatasourceconfigdiagnosticstitle.html ドライバ・レベルの統計をモニタリングするためのコールバック(非推奨) http://docs.oracle.com/cd/E72987_01/wls/JDBCA/monitor.htm#sthref108

Page 69: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

v$session ビューの ECID 列へ ECID 値を設定 (2) [JDBCDriverInterceptor.java] : DriverInterceptor 実装クラス

69

public class JDBCDriverInterceptor implements DriverInterceptor { @Override public Object preInvokeCallback(Object obj, String mtd, Object[] objs) throws SQLException { if (o.getClass().getName().matches("oracle¥¥.jdbc¥¥.driver¥¥.OraclePreparedStatement.*") && mtd.equals("executeUpdate")) { Connection conn = (Connection)((PreparedStatement)obj).getConnection(); conn.setClientInfo("OCSID.ECID", weblogic.diagnostics.context.DiagnosticContextHelper.getContextId()); // ... } // ...

※ 参考情報 weblogic.jdbc.extensions Interface DriverInterceptor (Deprecated) http://docs.oracle.com/cd/E72987_01/wls/WLAPI/weblogic/jdbc/extensions/DriverInterceptor.html setClientInfo Method https://docs.oracle.com/cd/E49329_01/java.121/b71308/jdbcvers.htm#BABDAEEC java.sql インタフェース Connection http://docs.oracle.com/javase/jp/7/api/java/sql/Connection.html

ECID をクライアント情報プロパティとしてデータベースに設定

Page 70: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

v$session ビューの ECID 列へ ECID 値を設定 (3)..

• PRE_CLASSPATH 環境変数を使用

• <domain-home>/lib にライブラリを配置

DriverInterceptor 実装クラスを含むライブラリを WLS のクラスパスに配置

70

$ export PRE_CLASSPATH=<work-dir>/SampleDiagnostics.jar ... $ cd <domain-home>/bin $ ./startManagedWebLogic.sh <server-name> ...

<domain-home>/lib/SampleDiagnostics.jar

どちらの方法でもライブラリを WLS のクラスパスに配置できる

Page 71: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver (Thin XA) が処理するデータを確認

71

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 72: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver のトランザクションデバッグログを確認 [oracle.jdbc.xa.client]

72

####<Jun 27, 2016 11:59:26 AM JST> <Debug> <oracle.jdbc.xa.client> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.xa.client.OracleXAResource:start] EB40847 Public Enter: BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, 0> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <oracle.jdbc.xa.client> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.xa.client.OracleXAResource:end] EB40847 Public Enter: BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, 67108864> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <oracle.jdbc.xa.client> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.xa.client.OracleXAResource:commit] EB40847 Public Enter: BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, true>

Server Log

トランザクション・ブランチの開始

トランザクション・ブランチのコミット

トランザクション・ブランチの終了

※ 参考情報 oracle.jdbc.xa.client Class OracleXAResource http://docs.oracle.com/cd/E57425_01/121/JAJDB/oracle/jdbc/xa/client/OracleXAResource.html

Page 73: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver の実行 SQL デバッグログを確認 [oracle.jdbc.driver]

73

####<Jun 27, 2016 11:59:27 AM JST> <Trace> <oracle.jdbc.driver> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.driver.T4CPreparedStatement:<init>] 69945535 Enter: oracle.jdbc.driver.T4CConnection@1d8a0869, "INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", -1, -1> ... ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <oracle.jdbc.driver> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.driver.OraclePreparedStatement:setInt] 69945535 Public Enter: 1, 9999> ... ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <oracle.jdbc.driver> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.driver.OraclePreparedStatement:setString] 69945535 Public Enter: 4, "SHERYL“> ...

Server Log

Page 74: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver の送受信パケットを確認 (1) [oracle.net.ns]

74

####<Jun 27, 2016 11:59:29 AM JST> <Trace> <oracle.net.ns> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.net.ns.DataPacket:send] 532EF555 Debug: Packet size=417 ... 00 00 37 62 38 30 63 34 |..7b80c4| 65 62 2D 61 63 61 64 2D |eb-acad-| 34 61 31 33 2D 62 36 37 |4a13-b67| 37 2D 65 65 66 66 31 31 |7-eeff11| 35 30 38 65 32 64 2D 30 |508e2d-0| 30 30 30 30 30 32 30 03 |0000020.| ... (続く)

Server Log

Page 75: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver の送受信パケットを確認 (2) [oracle.net.ns]

75

00 01 00 00 00 00 00 49 |.......I| 4E 53 45 52 54 20 49 4E |NSERT.IN| 54 4F 20 45 4D 50 20 28 |TO.EMP.(| 45 4D 50 4E 4F 2C 20 43 |EMPNO,.C| 4F 4D 4D 2C 20 44 45 50 |OMM,.DEP| 54 4E 4F 2C 20 45 4E 41 |TNO,.ENA| 4D 45 2C 20 48 49 52 45 |ME,.HIRE| 44 41 54 45 2C 20 4A 4F |DATE,.JO| 42 2C 20 4D 47 52 2C 20 |B,.MGR,.| 53 41 4C 29 20 56 41 4C |SAL).VAL| 55 45 53 20 28 3A 31 20 |UES.(:1.| 2C 20 3A 32 20 2C 20 3A |,.:2.,.:| ... (続く)

Server Log

Page 76: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver の送受信パケットを確認 (3). [oracle.net.ns]

76

33 20 2C 20 3A 34 20 2C |3.,.:4.,| 20 3A 35 20 2C 20 3A 36 |.:5.,.:6| 20 2C 20 3A 37 20 2C 20 |.,.:7.,.| 3A 38 20 29 01 01 01 01 |:8.)....| ... 03 C2 64 64 02 C2 0A 02 |..dd....| C1 1F 06 53 48 45 52 59 |...SHERY| 4C 07 77 BA 07 1F 01 01 |L.w.....| 01 08 53 41 4C 45 53 4D |..SALESM| 41 4E 03 C2 4D 63 02 C2 |AN..Mc..| 15 |. | ...

SQL> SELECT dump(hiredate, 16) FROM scott.emp WHERE empno = 9999; DUMP(HIREDATE,16) ------------------------------ Typ=12 Len=7: 77,ba,7,1f,1,1,1 1986-07-31/00:00:00

Typ=2 : NUMBER 型

Typ=12 : DATE 型

※ 参考情報 Oracleの組込みデータ型 http://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements001.htm#i54330

Server Log

9999

SQL> SELECT dump(9999, 16) FROM dual; DUMP(9999,16) --------------------- Typ=2 Len=3: c2,64,64

Page 77: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver のデバッグログの設定 (1) [OracleLog.properties] : デバッグログ設定ファイル

77

java.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter handlers = java.util.logging.ConsoleHandler ... oracle.jdbc.xa.level = FINEST oracle.jdbc.xa.client.level = FINEST oracle.jdbc.driver.level = FINEST oracle.net.ns.level = FINEST ...

実行 SQL を確認

トランザクションを確認

送受信パケットを確認

※ 参考情報 JDBCロギングの有効化と使用 https://docs.oracle.com/cd/E49329_01/java.121/b71308/diagnose.htm#sthref983 Enable native Oracle JDBC logging for WebLogic Server (Doc ID 1249585.1) How To Log SQL Statement/PreparedStatement of Oracle SQL Driver in WebLogic Server (Doc ID 1352042.1)

Page 78: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver のデバッグログの設定 (2).. WLS の起動方法

78

$ export PRE_CLASSPATH=<oracle-home>/oracle_common/modules/oracle.jdbc/ojdbc7_g.jar $ export JAVA_OPTIONS="-Doracle.jdbc.Trace=true -Djava.util.logging.config.file=<work-dir>/OracleLog.properties $JAVA_OPTIONS“ ... $ cd <domain-home>/bin $ ./startManagedWebLogic.sh <server-name> ...

※ 参考情報 JDBCロギングの有効化と使用 https://docs.oracle.com/cd/E49329_01/java.121/b71308/diagnose.htm#sthref983 Enable native Oracle JDBC logging for WebLogic Server (Doc ID 1249585.1) How To Log SQL Statement/PreparedStatement of Oracle SQL Driver in WebLogic Server (Doc ID 1352042.1)

JDBC デバッグ用 JAR ファイル

ロギングを有効化 ロギング構成ファイルの指定

Page 79: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC Driver とデータベース間の送受信パケットを確認

79

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 80: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle Net Trace を確認 (1) [svr_4432.trc (svr_<SPID>.trc)]

80

[27-JUN-2016 11:59:29:183] nsbasic_brc: packet dump ... [27-JUN-2016 11:59:29:183] nsbasic_brc: 00 00 37 62 38 30 63 34 |..7b80c4| [27-JUN-2016 11:59:29:183] nsbasic_brc: 65 62 2D 61 63 61 64 2D |eb-acad-| [27-JUN-2016 11:59:29:183] nsbasic_brc: 34 61 31 33 2D 62 36 37 |4a13-b67| [27-JUN-2016 11:59:29:183] nsbasic_brc: 37 2D 65 65 66 66 31 31 |7-eeff11| [27-JUN-2016 11:59:29:183] nsbasic_brc: 35 30 38 65 32 64 2D 30 |508e2d-0| [27-JUN-2016 11:59:29:183] nsbasic_brc: 30 30 30 30 30 32 30 03 |0000020.| ... (続く)

Page 81: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle Net Trace を確認 (2) [svr_4432.trc (svr_<SPID>.trc)]

81

[27-JUN-2016 11:59:29:183] nsbasic_brc: 00 01 00 00 00 00 00 49 |.......I| [27-JUN-2016 11:59:29:183] nsbasic_brc: 4E 53 45 52 54 20 49 4E |NSERT.IN| [27-JUN-2016 11:59:29:183] nsbasic_brc: 54 4F 20 45 4D 50 20 28 |TO.EMP.(| [27-JUN-2016 11:59:29:183] nsbasic_brc: 45 4D 50 4E 4F 2C 20 43 |EMPNO,.C| [27-JUN-2016 11:59:29:183] nsbasic_brc: 4F 4D 4D 2C 20 44 45 50 |OMM,.DEP| [27-JUN-2016 11:59:29:183] nsbasic_brc: 54 4E 4F 2C 20 45 4E 41 |TNO,.ENA| [27-JUN-2016 11:59:29:183] nsbasic_brc: 4D 45 2C 20 48 49 52 45 |ME,.HIRE| [27-JUN-2016 11:59:29:183] nsbasic_brc: 44 41 54 45 2C 20 4A 4F |DATE,.JO| [27-JUN-2016 11:59:29:184] nsbasic_brc: 42 2C 20 4D 47 52 2C 20 |B,.MGR,.| [27-JUN-2016 11:59:29:184] nsbasic_brc: 53 41 4C 29 20 56 41 4C |SAL).VAL| [27-JUN-2016 11:59:29:184] nsbasic_brc: 55 45 53 20 28 3A 31 20 |UES.(:1.| [27-JUN-2016 11:59:29:184] nsbasic_brc: 2C 20 3A 32 20 2C 20 3A |,.:2.,.:| ... (続く)

Page 82: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle Net Trace を確認 (3). [svr_4432.trc (svr_<SPID>.trc)]

82

[27-JUN-2016 11:59:29:184] nsbasic_brc: 33 20 2C 20 3A 34 20 2C |3.,.:4.,| [27-JUN-2016 11:59:29:184] nsbasic_brc: 20 3A 35 20 2C 20 3A 36 |.:5.,.:6| [27-JUN-2016 11:59:29:184] nsbasic_brc: 20 2C 20 3A 37 20 2C 20 |.,.:7.,.| [27-JUN-2016 11:59:29:184] nsbasic_brc: 3A 38 20 29 01 01 01 01 |:8.)....| ... [27-JUN-2016 11:59:29:184] nsbasic_brc: 03 C2 64 64 02 C2 0A 02 |..dd....| [27-JUN-2016 11:59:29:184] nsbasic_brc: C1 1F 06 53 48 45 52 59 |...SHERY| [27-JUN-2016 11:59:29:184] nsbasic_brc: 4C 07 77 BA 07 1F 01 01 |L.w.....| [27-JUN-2016 11:59:29:184] nsbasic_brc: 01 08 53 41 4C 45 53 4D |..SALESM| [27-JUN-2016 11:59:29:184] nsbasic_brc: 41 4E 03 C2 4D 63 02 C2 |AN..Mc..| [27-JUN-2016 11:59:29:184] nsbasic_brc: 15 |. | [27-JUN-2016 11:59:29:184] nsbasic_brc: exit: oln=0, dln=407, tot=417, rc=0

※ 参考情報 Oracle Net Servicesのトレース・ファイルの評価 http://docs.oracle.com/cd/E16338_01/network.112/b56288/trouble.htm#i459469

Page 83: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle Net Trace を trcasst で検証 [svr_4432.trc (svr_<SPID>.trc)]

83

$ trcasst svr_4432.trc ... Start Timestamp : 27-JUN-2016 11:52:08:018 End Timestamp : 27-JUN-2016 12:03:23:456 ... ORACLE NET SERVICES: Total Calls : 20 sent, 21 received, 0 oci Total Bytes : 5475 sent, 5731 received Average Bytes: 273 sent per packet, 272 received per packet Maximum Bytes: 2349 sent, 2585 received Grand Total Packets: 20 sent, 21 received ※ 参考情報

トレース・アシスタントを使用したトレース・ファイルの検証 http://docs.oracle.com/cd/E16338_01/network.112/b56288/trouble.htm#i459188

送受信パケットの統計情報を出力

Page 84: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle Net Trace の設定. [<oracle-home>/network/admin/sqlnet.ora] : Oracle Net Services の設定ファイル

84

TRACE_LEVEL_SERVER=16 TRACE_TIMESTAMP_SERVER=ON TRACE_DIRECTORY_SERVER= <oracle-home>/network/trace DIAG_ADR_ENABLED=OFF

※ 参考情報 SQL*Net/Net8/Oracle Net Servicesのトレースの取得方法(KROWN:13481) (Doc ID 1703086.1) sqlnet.oraファイルのトレース・パラメータ http://docs.oracle.com/cd/E16338_01/network.112/b56288/trouble.htm#i435776

※ 設定後に新規に作られたデータベース接続から Net Trace が開始されます

Page 85: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Database が処理するデータを確認

85

WLS Managed Server (Server-0)

HTTP Server (Embedded)

Web Service (Servlet + JAX-WS)

Database

Web Container

EJB (Stateless Session Bean)

JTA (Javax.transaction.TransactionManager) Data Source

SOAP Client (soapUI)

EJB Container

Transaction Manager

JDBC Driver (Thin XA)

JPA (EclipseLink)

Page 86: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle SQL Trace を確認 (1) [orcl_ora_4432_SCOTT.trc (<SID>_ora_<SPID>_<scheme-name>.trc)] : SQL のパース

86

===================== PARSING IN CURSOR #140122095372064 len=117 dep=0 uid=83 oct=2 lid=83 tim=1466996369185199 hv=3728398626 ad='63f76b50' sqlid='1bkaadbg3pq92' INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (:1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 ) END OF STMT PARSE #140122095372064:c=1000,e=614,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1466996369185198 ===================== ... (続く)

※ 参考情報 TKPROFにかける前のSQLトレースのファイルの解析(KROWN:53665) (Doc ID 1718603.1) Interpreting Raw SQL_TRACE output (Doc ID 39817.1)

1466996369185198 = 2016/06/27 11:59:29.185198 (エポック (1970/01/01) からのマイクロミリ秒)

Page 87: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle SQL Trace を確認 (2) [orcl_ora_4432_SCOTT.trc (<SID>_ora_<SPID>_<scheme-name>.trc)] : 変数のバインド

87

BINDS #140122095372064: Bind#0 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=01 csi=873 siz=192 off=0 kxsbbbfp=7f70b7f5ca70 bln=22 avl=03 flg=05 value=9999 ... Bind#3 oacdty=01 mxl=32(24) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000010 frm=01 csi=873 siz=0 off=72 kxsbbbfp=7f70b7f5cab8 bln=32 avl=06 flg=01 value="SHERYL" ... (続く)

oacdtv=02 : NUMBER 型

※ 参考情報 Oracleの組込みデータ型 http://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements001.htm#i54330

oacdtv=01 : VARCHAR2 型

Page 88: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle SQL Trace を確認 (3). [orcl_ora_4432_SCOTT.trc (<SID>_ora_<SPID>_<scheme-name>.trc)] : トランザクションのコミット

88

XCTEND rlbk=0, rd_only=0, tim=1466996389252541

※ 参考情報 COMMITやROLLBACKが行われたタイミングについて(KROWN:22776) (Doc ID 1706879.1)

XCTEND はトランザクションの終了を表す rlbk=0 : コミット rlbk=1 : ロールバック

1466996389252541 = 2016/06/27 11:59:49.252541 (エポック (1970/01/01) からのマイクロミリ秒)

Page 89: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle SQL Trace の設定 (1)

• データベース・接続レベルでの設定

• データベース・インスタンスレベルでの設定

89

※ 参考情報 event 10046 と sql_trace の関係 (alter文で動的に設定した場合の動作)(KROWN:27357) (Doc ID 1708940.1)

※ 設定後のデータベース接続でその後すぐに SQL Trace が開始されます

設定 :

SQL> alter session set events '10046 trace name context forever, level 12' 設定解除 :

SQL> alter session set events '10046 trace name context off'

※ 設定後に新規に作られたデータベース接続から SQL Trace が開始されます

設定 :

SQL> alter system set events '10046 trace name context forever, level 12' 設定解除 :

SQL> alter system set events '10046 trace name context off‘

Page 90: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle SQL Trace の設定 (2)

• event 10046 の level による違い

90

※ 参考情報 event 10046 と sql_trace の関係 (alter文で動的に設定した場合の動作)(KROWN:27357) (Doc ID 1708940.1)

level 1 : 通常の SQL Trace

level 4 : level 1 の内容 + バインド変数の情報

level 8 : level 1 の内容 + WAIT event の情報

level 12 : level 1 の内容 + バインド変数の情報 + WAIT event の情報

※ デバッグ目的であれば、通常は level 12 を設定して下さい

Page 91: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle SQL Trace の設定 (3)..

• トリガーの設定

• トリガーの設定解除

ログオントリガーを使用した特定スキーマの SQL Trace の取得

91

SQL> CREATE OR REPLACE TRIGGER logontrig AFTER logon ON database 2 begin 3 if ora_login_user = 'SCOTT' then 4 execute immediate 'alter session set tracefile_identifier = '||'SCOTT'; 5 execute immediate 'alter session set events ''10046 trace name context forever, level 12'''; 6 end if; 7 end; 8 /

※ 参考情報 LOGON トリガーを使用して SOA Suite が実行する SQL をトレースする方法(KROWN:156209) (Doc ID 1758802.1)

SQL> DROP TRIGGER logontrig;

データベース・接続レベルでの SQL Trace 取得を有効化

SQL Trace ファイル名に含める文字列を設定

Page 92: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Program Agenda

はじめに

検証アプリケーションの動作シナリオ説明

各ポイントでの見える化実践

Java Flight Recorder からの見える化

まとめ

1

2

3

4

5

92

Page 93: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

前章の見える化アプローチと比較したときのメリット

• リクエストに紐づく情報を GUI で確認できる

• Java アプリケーションコードの変更、再ビルド、再デプロイは必要ない

•管理コンソールなどでの設定変更は必要ない

• デバッグログなどの設定は必要ない

93

Page 94: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

前章の見える化アプローチと比較したときのデメリット

•調査に必要な情報を必ず得られるとは限らない

•得られない情報を確認する場合は、別途詳細アプローチが必要

94

Page 95: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Java Flight Recorder は標準の Java SE に付属している

• Java Flight Recorder を使用可能なバージョン – Oracle Java SE 7 Update 40 以降

– Oracle Java SE 8

95

※ Java SE の他に追加インストールは必要ありません

Page 96: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Java Flight Recorder は商用機能です

•本番環境での商用利用の場合はライセンスが必要です – Oracle Java SE Advanced または Oracle Java SE Suite

– Oracle WebLogic Server Enterprise Edition または Oracle WebLogic Server Suite

96

※ WLS EE は Oracle Java SE Advanced を含みます ※ WLS Server Suite は WLS EE を含みます

Oracle Fusion Middlewareライセンス情報ユーザー・マニュアル 2.2 Oracle WebLogic Server http://docs.oracle.com/cd/E68912_01/doc.1213/FMWLC/products2.htm#CHCJBBEG

Page 97: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Java Flight Recorder のフライト記録確認の流れ

• Java Flight Recorder (JFR) は JVM からファイルへフライト記録を出力する

• Java Mission Control (JMC) でフライト記録を開いて内容を GUI で確認する

97

フライト記録

Servlet

JavaVM

JDBC

Java Mission Control Java Flight Recorder

JVM

WLS

Java アプリ

Page 98: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

ECID に関連するイベントの確認 [WebLogic (タブ) ] – [ECID ]

98

...

特定の ECID に紐付くイベントのみを一覧できる

Page 99: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

ECID に関連するイベントのグラフ [イベント (タブ) ] – [グラフ ]

99

Servlet

JDBC

EJB

Java

Page 100: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Servlet 実行イベントの情報 [イベント (タブ) ] – [グラフ ]

100

Servlet

Page 101: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

EJB 実行イベントの情報 [イベント (タブ) ] – [グラフ ]

101

EJB

Page 102: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JDBC 実行イベントの情報 [イベント (タブ) ] – [グラフ ]

102

JDBC

Page 103: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Socket Read (Java) 実行イベントの情報 (1) [イベント (タブ) ] – [グラフ ]

103

Java

Page 104: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Socket Read (Java) 実行イベントの情報 (2). [イベント (タブ) ] – [ログ ]

104

...

すべてのスタックを確認できる

Page 105: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

WebLogic Server プラグインのインストール [WebLogic (タブ) ] 表示と使用のため

105

Page 106: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

フライト記録の取得開始 (1)

• フライト記録の開始ウィザードを起動

106

Page 107: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

フライト記録の取得開始 (2)

•記録方法を設定

107

Page 108: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

フライト記録の取得開始 (3)

•記録オプションを設定

108

Page 109: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

フライト記録の取得開始 (4).

•記録が開始していることを確認

109

Page 110: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

フライト記録のダンプ

•記録をダンプしてファイルへ出力

110

Page 111: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Java Mission Control の使い方

• Java Mission Control オンラインヘルプ

111

Page 112: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Java Flight Recorder についての参考情報

•製品ドキュメント

• Advisor Webcast 資料

112

Java Platform, Standard Editionトラブルシューティング・ガイド (日本語) http://docs.oracle.com/javase/jp/8/docs/technotes/guides/troubleshoot/ Java Platform, Standard Edition Troubleshooting Guide (英語) http://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/ Java Mission Control ドキュメント http://docs.oracle.com/javacomponents/jp/index.html jcmd コマンド http://docs.oracle.com/javacomponents/jp/jmc-5-5/jfr-runtime-guide/comline.htm java コマンド http://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/java.html

Advisor Webcast : Java Flight Recorder でサクサクすすむ WebLogic Serverトラブルシューティン グ (Doc ID 2100914.1)

Page 113: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Program Agenda

はじめに

検証アプリケーションの動作シナリオ説明

各ポイントでの見える化実践

Java Flight Recorder からの見える化

まとめ

1

2

3

4

5

113

Page 114: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

まとめ

•情報の見える化によって動作の把握や問題個所の切り分けができます

•各ポイントでの詳細調査のお供に、Java Flight Recorder も役に立ちます

•ぜひ今後の問題調査やトラブルシュートに役立ててください!

• ありがとうございました

114

Page 115: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 115

Page 116: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 116

Page 117: サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!