本文へジャンプ

【FAQ】共有クラスを使用したWAS V6.1で起動に失敗する問題の回避策

資料作成日 2008年04月09日
資料更新日 2009年02月23日

<内容/目次>

【問題の概要】

1台のノード上に複数のJVMが稼動する環境にて共有クラスを使用する設定を行っている場合、1番目のJVMは正常に起動しますが、2番目以降のJVMの起動に失敗する場合があります。この問題が発生した場合には、以下の対策を実施ください。


【対象製品】

対象バージョン: WAS V6.1

対象エディション: Express、Base、Network Deploymentにて、1つのノード上で複数JVMを起動している環境

対象プラットフォーム: Windows, AIX, Linux, z/OS  (IBM JDK 5.0が稼動する環境)


【内容詳細】

1台のノード上に複数のJVMが稼動する環境にて共有クラスを使用する設定を行っている場合、1番目のJVMは正常に起動しますが、2番目以降のJVMの起動 (startServer.sh/startServer.bat) に失敗する可能性があります。このとき、起動が正常に完了しないWASでは、ADMU3200Iのメッセージが出力された後、次の処理に進まずにハング状態となります。

【正常時のstartServer.log】

[08/02/11 20:33:26:812 JST] 0000000a AdminTool A ADMU3200I: サーバーが起動しました。 開始処理中です。
[08/02/11 20:35:22:296 JST] 0000000a AdminTool A ADMU3000I: サーバー server1 が e-business 用にオープンされました。プロセス ID は 5320 です。

【問題発生時のstartServer.log】 
[08/02/11 20:33:26:812 JST] 0000000a AdminTool A ADMU3200I: サーバーが起動しました。 開始処理中です。
(この後処理が進まない)


【原因】

この問題は、共有クラスのキャッシュ機能の不具合により発生します。
WAS V6.1のデフォルト構成では、共有クラスを使用する設定になっています。

【回避策】 

共有クラスを使用しない設定に変更することで、この問題を回避することができます。

共有クラスの使用を停止するには、以下いずれかの方法を実施します。

(方法1) 構成ファイルを直接編集する方法 (WASが起動できない場合)

1. server.xmlファイルの"jvmEntries"タグのgenericJvmArgumentの引数の一番最後に -Xshareclasses:none を追加し、ファイルを保存します。

<WAS_ROOT>/profiles/(profile name)/config/cells/(cell name)/nodes/(node naem)/servers/(server name)/server.xml
(抜粋)
<jvmEntries xmi:id="JavaVirtualMachine_1163669258642" verboseModeClass="false" verboseModeGarbageCollection="false" verboseModeJNI="false" runHProf="false"hprofArguments="" debugMode="false" debugArgs="-Djava.compiler=NONE -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777" genericJvmArguments=" -Xshareclasses:none" />

2. WASを再起動します。


(方法2) WASの管理コンソールから修正する方法 (WAS起動中に回避策を実施する場合)

管理コンソールから、汎用JVM引数を指定します。

1. 「サーバー」 > 「アプリケーション・サーバー」 > 該当のサーバー名をクリックします。
2. 「サーバー・インフラストラクチャー」の「Javaおよびプロセス管理」を展開し、「プロセス定義」をクリックします。
3. 「追加プロパティー」の「Java仮想マシン」をクリックします。
4. 汎用JVM引数に、-Xshareclasses:none を指定し、「適用」をクリックします。



5. マスター構成に保管し、WASを再起動します。


【共有クラスに関する補足】

共有クラスとは、IBM JDK 5.0 にて追加された機能であり、同一ノード内の複数JVMにてクラスを共有する機能になります。
共有されるクラスは、JVMのHeapの外である、共有メモリーに保管されます。
共有クラスを使うことにより、複数のJVMが稼動している環境では、JVM起動時間の短縮、および使用メモリー量の削減といった効果を得る事ができます。

WAS V6.1でのデフォルト構成では、共有クラスは使用する設定になっています。
特に問題が発生していない環境では、共有クラスを使用可能の状態で運用されることをお勧めいたします。

IBM JDK 5.0が提供する共有クラスの詳細については、以下の記事をご参照ください。
Java technology, IBM style: Class sharing (英語)


【参考情報】

■ WASでのJVMの設定については、以下のマニュアルをご参照ください。
InfoCenter JVM仮想マシンの設定


■ IBM JDKの詳細については、こちらのガイドをご参照ください。
Java Diagnostics Guide 5.0 (IBM JDK 5.0対象)

Deployment Manager, Server or Node Agent may fail to start if WebSphere's Java 5.0 JVM's shared classes become corrupted.

PK33073: HANGS MAY OCCUR WHEN USING -XSHARECLASSES




修正履歴
09/02/23 (方法1) の引数に余分な " が含まれていたため、修正。 

<添付資料>

<文書情報>

  1. 製品/カテゴリー名

    WebSphere Application Server

  2. 有効期限

    2012年04月09日

  3. 発表日

  4. 資料番号