• Like
WebLogic Server 技術紹介「第5回WebLogic Server勉強会@東京」資料
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

WebLogic Server 技術紹介「第5回WebLogic Server勉強会@東京」資料

  • 10,985 views
Published

第5回WebLogic Server勉強会@東京の資料です。当資料は講演者 住商情報システム株式会社 刀根誠治 氏の資料です。

第5回WebLogic Server勉強会@東京の資料です。当資料は講演者 住商情報システム株式会社 刀根誠治 氏の資料です。

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • http://www.mkv-to-dvd.org/ MKV to DVD
    http://www.freeavchdconverter.org/ avchd converter
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
10,985
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
115
Comments
1
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 第5回Weblogic Server勉強会@東京 資料 2009年11月27日 住商情報システム株式会社
  • 2. トラブルに備える
  • 3. トラブルに備える •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 万一の状態に備えて、予め取得しておくべき情報を整理 しておくことは、短時間で問題解決させる上で重要です。 常に取得すべき情報 configディレクトリ一式(config.xml)、WebLogic サーバログ、 標準出力ログ サーバハング(ハングアップ)した時 スレッドダンプ プロセスダウン(プロセスのクラッシュ)した時 Windows: ワトソンログ、イベントビューア Unix/Linux: バックトレース、Core ファイル(JRockit の場合) ※Core ファイルを取得いただく際は ulimit -c に十分大きな値 もしくは   unlimited が設定されているかをご確認ください。   (設定例.ulimit -c unlimited)
  • 4. サーバハングとプロセスダウンについて •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• お問い合わせで“ダウン”という言葉をいただく際、プロセスがクラッシ ュ(プロセスダウン)したのか、ハングアップ(サーバハング)なのか、 それらが明確になっていない形で報告をいただくことが多いです。 ハングアップかクラッシュかで、対応が異なってくることから、予め切 り分けを行っていただくと、その確認時間を省略することができます。 プロセスの確認方法(プロセスが無ければクラッシュ) Windows タスクマネージャ UNIX/Linux ps -ef | grep java “weblogic.Server” というキーワードが含まれているプロセスがあるか確認します。
  • 5. 過去にあった不安定要素(一部) •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• JDK1.2の頃 javacでメモリリーク? ヒープサイズで 1GB 確保すると不安定、とか... WLS8.1 の初期くらいまで Type2 JDBC Driver で高負荷時にプロセスダウン パフォーマンスパック(NativeI/O)の安定性 →最近では、このような報告は聞かなくなりました。
  • 6. 標準出力ログの 設定方法
  • 7. デフォルトで提供されているスクリプトを活用 •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• WLS9.x 以降、bin¥startWebLogic.cmd (.sh) には、 WLS_REDIRECT_LOG という環境変数が用意されて いるので、   if "%WLS_REDIRECT_LOG%" 行の前に WLS_REDIRECT_LOG の設定を追加します。 記述例:  :  : %JAVA_HOME%¥bin¥java %JAVA_VM% -version %JAVA_HOME%¥bin¥java %JAVA_VM% -version set WLS_REDIRECT_LOG=wls_stdout.log set WLS_REDIRECT_LOG=wls_stdout.log if "%WLS_REDIRECT_LOG%"=="" (( if "%WLS_REDIRECT_LOG%"==""  :  :
  • 8. 直接設定する •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• startWebLogic.cmd (.sh) に、WLS_REDIRECT_LOG という環境変数が定義されていない場合は、以下のよう に直書きします。 記述例: (1行で記述します。)  :  : %JAVA_HOME%¥bin¥java %JAVA_VM% %MEM_ARGS% %JAVA_HOME%¥bin¥java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%¥server¥lib¥weblogic.policy" -Djava.security.policy="%WL_HOME%¥server¥lib¥weblogic.policy" weblogic.Server >> wls_stdout.log 2>&1 weblogic.Server >> wls_stdout.log 2>&1  :  : ※">>" とした場合は、対象ファイルに対して追記で、   ">" とした場合は、上書きになります。
  • 9. Windows サービスに登録されている場合 •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• -log: オプションで標準出力ログの設定を行います。 Windows サービスに登録するスクリプトに、-log: オプションを追加し、サービスの再登録を行います。 installService.cmd 記述例: (1行で記述します。)  :  : “%WL_HOME%¥server¥bin¥beasvc” -install -svcname:“beasvc “%WL_HOME%¥server¥bin¥beasvc” -install -svcname:“beasvc %DOMAIN_NAME%_%SERVER_NAME%” %DOMAIN_NAME%_%SERVER_NAME%” -javahome:“%JAVA_HOME%” -execdir:“%USERDOMAIN_HOME%” -javahome:“%JAVA_HOME%” -execdir:“%USERDOMAIN_HOME%” -extrapath:“%EXTRAPATH%” -password:“%WLS_PW%” -extrapath:“%EXTRAPATH%” -password:“%WLS_PW%” -cmdline:%CMDLINE% -cmdline:%CMDLINE% -log:"C:¥bea¥user_projects¥mydomain¥wls_stdout.log" -log:"C:¥bea¥user_projects¥mydomain¥wls_stdout.log"  :  : ※古い環境の beasvc.exe では、-log をサポートしておりませんので、   最新の beasvc.exe に入替えてください。
  • 10. スレッドダンプの取得 テクニック
  • 11. 基本的な方法(1/2) •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Windows 上でコマンドプロンプトで起動している場合: Ctrl+Break Linux/Unix の場合: ps -ef | grep java “weblogic.Server” というキーワードが含まれているプロセス ID(PID) を特定します。 kill -3 PID weblogic.Admin コマンドを使う場合: java weblogic.Admin -url t3://localhost:7001 -username XXXX - password XXXX THREAD_DUMP -url:管理コンソールへの接続URL -username:管理コンソールへの接続ユーザ -password:上記接続ユーザのパスワード
  • 12. 基本的な方法(2/2) •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• WLST(WebLogic Scripting Tool) の場合: 以下のようなコマンドで、取得可能です。 >cd <DOMAIN_ROOT>¥bin >cd <DOMAIN_ROOT>¥bin >setDomainEnv.cmd >setDomainEnv.cmd >java weblogic.WLST  >java weblogic.WLST  >connect() >connect() >threadDump() >threadDump() >exit() >exit() ⇒threadDump()を実行すると、<DOMAIN_ROOT>に、 Thread_Dump_[ServerName].txt が作成されます。
  • 13. 管理コンソールから(1/2) •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• サーバ : モニタ : スレッド
  • 14. 管理コンソールから(2/2) •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• サーバ : モニタ : スレッド (続き) スタックトレースは 表示されませんが 処理内容は伺えます。
  • 15. JRockit Management Console (JRMC) •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• [JROCKIT_HOME]¥bin¥jrmc.exe ※JRockit R27 以前は console.exe スレッドを選択すると スタックトレースが 表示されます。
  • 16. jrcmd を使って •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• [JROCKIT_HOME]¥bin¥jrcmd.exe ※JRockit R25 からサポート print_threads 実行例: 引数なしで実行するとJRockitで起動 しているプロセス一覧が表示されます。 >jrcmd >jrcmd 848 jrockit.tools.jrcmd.JrCmd 848 jrockit.tools.jrcmd.JrCmd 3896 weblogic.Server 3896 weblogic.Server コマンドのフォーマット: jrcmd [PID] print_threads >jrcmd 3896 print_threads >jrcmd 3896 print_threads 3896: 3896: ===== FULL THREAD DUMP =============== ===== FULL THREAD DUMP =============== Tue Aug 18 16:21:04 2009 Tue Aug 18 16:21:04 2009 BEA JRockit(R) R27.6.0-50_o-100423-1.6.0_05-20080626-2105-windows-ia32 BEA JRockit(R) R27.6.0-50_o-100423-1.6.0_05-20080626-2105-windows-ia32 "Main Thread" id=1 idx=0x4 tid=900 prio=5 alive, in native, waiting "Main Thread" id=1 idx=0x4 tid=900 prio=5 alive, in native, waiting -- Waiting for notification on: weblogic/t3/srvr/T3Srvr@0x09F54728[fat lock] -- Waiting for notification on: weblogic/t3/srvr/T3Srvr@0x09F54728[fat lock] at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method) 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(J)V(Native Method)  :  :
  • 17. beasvc -dump •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Windows サービスに登録されているコマンド プロンプト から、次のコマンドを入力します。  [WL_HOME]¥bin¥beasvc -dump -svcname:[SERVICE_NAME] ※WL_HOME は、WebLogic Server のインストール ディレクトリ。   SERVICE_NAME は、サーバ インスタンスを実行している Windows     サービス名です。 実行例: >beasvc -dump -svcname:"beasvc base_domain_AdminServer " >beasvc -dump -svcname:"beasvc base_domain_AdminServer " ※出力先は、標準出力ですので、予め –log: オプション  を設定しておく必要があります。
  • 18. その他ツール •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• SendSignal  http://www.latenighthacking.com/projects/2003/sendSignal/ exeファイル コマンドプロンプトより、  >SendSignal.exe プロセスID で取得可能 出力先はJVM側の標準出力 StackTrace  http://www.adaptj.com/root/main/stacktrace JVMで動作するGUIツール メニューから簡単に取得できる(こちらもPIDごとに取得可能) スレッドダンプはツール自身に出力される
  • 19. JRockit Tips
  • 20. JDK のバージョンと R の関係 •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• R は、JRockit 内部エンジンのバージョン Java のバージョンに依存せず実装されています。 R23 ・・・ JRockit 7.0, 8.1 R24 ・・・ JRockit 1.4.2 R25 ・・・ JRockit 5.0 R26 ・・・ JRockit 1.4.2, 5.0 R27 ・・・ JRockit 1.4.2, 5.0, 6.0 最新は、R27.6.3(Oracle JRockit Mission Control 3.1.0 ) 以下のバージョンの Java JDK をサポート * Java 6 SE Update 11 * J2SE 5.0 Update 17 * J2SE 1.4.2_19
  • 21. 使用上の注意 •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Windows サービスで実行している JRockit プロセスは JRMC, jrcmd 等で監視・制御出来ない R24 系だと、オプションは小文字でないと受付てくれない -XnoOpt → -Xnoopt -XverboseTimeStamp → -Xverbosetimestamp ※オンラインドキュメントは、最新のリリース(R26, 27)   に向けて提供していることに注意
  • 22. jrcmd Tips •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 稼動中に GCログの出力を有効にする >jrcmd [PID] verbosity change=gc=info JRockit のメモリ使用状況を表示する >jrcmd [PID] print_memusage java ヒープ上のオブジェクト情報を出力 >jrcmd [PID] print_object_summary ※これら機能は、予告なしに出力情報が変更されたり使用出来なくなることを 前提にご使用ください。
  • 23. その他テクニック
  • 24. BEA-XXXXXX のメッセージ詳細を 日本語で確認する •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• weblogic.GetMessage コマンドのフォーマット: 実行例: weblogic.GetMessage -id [MessageID] -detail >weblogic.GetMessage -id 000337 -detail >weblogic.GetMessage -id 000337 -detail 000337: 要求 “{2}” の処理中に {0} は “{1}” 秒間ビジー状態になっています。これは、コン 000337: 要求 “{2}” の処理中に {0} は “{1}” 秒間ビジー状態になっています。これは、コン フィグレーションされた時間 (StuckThreadMaxTime) "{3}" 秒を超えています。スタック トレー フィグレーションされた時間 (StuckThreadMaxTime) "{3}" 秒を超えています。スタック トレー ス :: ス {4} {4} サブシステム: WebLogicServer サブシステム: WebLogicServer 重大度: Error 重大度: Error メッセージの詳細: スレッドが、コンフィグレーションされたタイムアウト時間より長くビジー状 メッセージの詳細: スレッドが、コンフィグレーションされたタイムアウト時間より長くビジー状 態であることが判明しました。 態であることが判明しました。 原因: サーバが非常にビジーな状態であるか、またはスレッドがハングしています。 原因: サーバが非常にビジーな状態であるか、またはスレッドがハングしています。 アクション: ハングしたスレッドが実行されているメソッドをモニタしてください。コンソールで要 アクション: ハングしたスレッドが実行されているメソッドをモニタしてください。コンソールで要 求実行機能をモニタするか、またはスレッドダンプ (weblogic.Admin THREAD_DUMP) を取 求実行機能をモニタするか、またはスレッドダンプ (weblogic.Admin THREAD_DUMP) を取 得してください。 得してください。
  • 25. ローテーションがサポートされていないログ を強制的にローテーションさせる •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 1.ダミーファイルを作成  ファイルサイズ 0 のファイル(今回は dummy.txt とします)を用意します。 2.現在のログファイル(wl-console.log)を別のファイル名にコピー  以下のようなコマンドでコピーします。  >cp wl-console.log wl-console.log.bak1 3.現在のログファイルをリセットします  以下のようなコマンドでファイルサイズをリセットします。  >cp dummy.txt wl-console.log ※このような操作は、OS の環境に依存する部分かと存じますので、   検証の上、実施していただきますようお願いします。
  • 26. スレッドダンプの見方 •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• アプリケーションを処理するスレッド スタックトレースの抜粋 "[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'" id=22 idx=0x4ctid=2928 prio=5 alive, "[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'" id=22 idx=0x4ctid=2928 prio=5 alive, in native, sleeping, native_waiting, daemon in native, sleeping, native_waiting, daemon at java/lang/Thread.sleep(J)V(Native Method) 現在処理中のメソッド at java/lang/Thread.sleep(J)V(Native Method) at jsp_servlet/__threadname._jspService(__threadname.java:82) 現在処理中のメソッドを at jsp_servlet/__threadname._jspService(__threadname.java:82) at weblogic/servlet/jsp/JspBase.service(JspBase.java:34) at weblogic/servlet/jsp/JspBase.service(JspBase.java:34) 呼び出しているスレッド at weblogic/servlet/internal/StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) at weblogic/servlet/internal/StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) at weblogic/servlet/internal/StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 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:292) at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:175) at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:175) at weblogic/servlet/internal/WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498) at weblogic/servlet/internal/WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498) at weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic/security/service/SecurityManager.runAs(Lweblogic/security/acl/internal/AuthenticatedSubject;Lweblogic/ at weblogic/security/service/SecurityManager.runAs(Lweblogic/security/acl/internal/AuthenticatedSubject;Lweblogic/ security/acl/internal/AuthenticatedSubject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;(Unknown Source) 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.securedExecute(WebAppServletContext.java:2180) at weblogic/servlet/internal/WebAppServletContext.execute(WebAppServletContext.java:2086) at weblogic/servlet/internal/WebAppServletContext.execute(WebAppServletContext.java:2086) at weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1406) at weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1406) at weblogic/work/ExecuteThread.execute(ExecuteThread.java:201) at weblogic/work/ExecuteThread.execute(ExecuteThread.java:201) at weblogic/work/ExecuteThread.run(ExecuteThread.java:173) at weblogic/work/ExecuteThread.run(ExecuteThread.java:173) at jrockit/vm/RNI.c2java(IIIII)V(Native Method) 下にいくほど、 at jrockit/vm/RNI.c2java(IIIII)V(Native Method) ---- end of trace end of trace 呼び出し元になります
  • 27. スレッドダンプ採取の間隔は? •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• そもそも、スレッドダンプを複数回取得するのはなぜ? 一定間隔で取得することで、アプリケーションの進行状況が把握 出来る為です。 スレッドダンプを取得する間隔が 5~10 秒おきとか、表 現があいまいなのはなぜ? アプリケーションの処理が滞る時間に依存する為です。 例えば、①の間隔では、問題となっている処理のスレッドを取得 出来ません。 スレッドダンプ取得 のタイミング ②① ② ② ① 時間軸 問題となっている処理を実行中
  • 28. •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ~おまけ~ WLSのバージョンアップ
  • 29. バージョンアップのメリット •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• • JVMのパフォーマンス向上・安定性の確保 アプリケーションサーバを動かすJVMのバージョンが上がることによる、 パフォーマンス向上・安定性の確保が出来る。 – パフォーマンス • 約2倍の性能向上(SPECjbb2005によるベンチマーク) – JRockit の安定性比較(リリースノートの情報より) • “crash” と記載された修正案件の件数 – JRockit JVM R24 台では、平均して 10 件以上   の記載 – JRockit JVM R27 台では、多くても 5 件 • 最新のアーキテクチャによる、サービスの向上、開発コストの低減 • サービス向上に関する機能 – 管理コンソールの強化、AD4J、Enterprise Manager のサポート • 開発コスト低減に関する機能 – JavaEE5、Oracle ADF、Spring Framework 29
  • 30. 本セッションおよびWebLogic全般の お問い合わせ •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• • WebLogic に関するご相談承ります! – メールアドレス: wl-sales@ml.scs.co.jp ※メールの際は“WebLogic Server 勉強会で…”と   入れていただくと、内容に区別がつき、助かります! WebLogicに対してのこれまでの取り組み 基幹システムでの構築・導入実績(APサーバ全般) 1998年よりほぼ全業種でのAPサーバ導入実績 大規模/基幹システムを含む3,000システムでの導入実績 24時間365日の緊急時サポート提供体制 24時間365日の緊急時サポート提供体制 APサーバサポート専門スタッフによる万全のサポート体制 APサーバサポート専門スタッフによる万全のサポート体制 教育サービスなどのさまざまな技術支援 教育サービスなどのさまざまな技術支援 30