目次


WebSphere Application Server V8 での JVM の更新

wsadmin および Jython を使用して WebSphere Application Server の PMI データを容易に収集し、レポートする

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: WebSphere Application Server V8 での JVM の更新

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:WebSphere Application Server V8 での JVM の更新

このシリーズの続きに乞うご期待。

はじめに

IBM WebSphere Application Server では、PMI (Performance Monitoring Infrastructure) を通してパフォーマンス・メトリクスを取得します。WebSphere Application Server は実行中に PMI を使用して、パフォーマンス(および統計情報)のメトリクス・データを収集します。収集されるメトリクスの数およびスコープは、必要となる情報のレベルによって異なります。

WebSphere Application Server および PMI に関し、重要な点をいくつか理解し、覚えておく必要があります。WebSphere Application Server の各 JVM において、PMI フレームワークは以下の要素で構成されています。

  • PMI サービス: データを収集するために、(NodeAgent 上でも)アクティブにしておく必要があります。
  • PMI モジュール: このモジュールによって、どのデータを収集するかを構成します。
  • PefMBean (Performance Mbean): この Bean によって、PMI サービスおよびデータ収集を構成します。

PMI は、JMX (Java™ Management eXtension) 標準に準拠しているため、JMX インターフェースを使用して PMI データにアクセスすることができます (図 1)。

図 1. JMX インターフェース
JMX インターフェース
JMX インターフェース

JMX の管理モデルでは、リソースを Mbean (Managed Bean) によって管理します。一部の Mbean は統計プロバイダーであり、Stats 属性を持っています。PerfMbean は 1 回の JMX 呼び出しで、複数の Mbean からデータを収集することができます。各アプリケーション・サーバーで、PMI データはモジュール、サブモジュール、およびカウンターを持つ階層ツリーのような構造で収集、格納されます (図 2)。サーバーの Mbean に対して PMI データを要求すると、そのサーバーのすべての PMI データを取得することができます。

図 2. Tivoli Performance Viewer のパフォーマンス・レポートに使用されるデータ収集の階層構造
Tivoli Performance Viewer のパフォーマンス・レポートに使用されるデータ収集の階層構造
Tivoli Performance Viewer のパフォーマンス・レポートに使用されるデータ収集の階層構造

最終的なメトリクスにアクセスするためには、レポートの対象として適切なモジュール、サブモジュール、およびカウンターを選択する必要があります。そのためによく使用される優れたグラフィカル・ツールが、IBM Tivoli Performance Viewer です。それをさらに一歩進め、Tivoli Performance Viewer を使用する場合と同じように wsadmin または Jython を使用して、モジュールをブラウズしたりメトリクスにアクセスしたりできると非常に便利です。幸いなことに、それが実際に可能なのです。

その方法について説明するために、以前公開された記事、「Writing PMI applications using the JMX interface(英語)」で説明した方法から始めましょう。その記事で作成した例は、Java 開発者向けでした。ここでは、この方法を使用すると、パフォーマンス・メトリクスをいかに容易に読み取り理解することができるかを、wsadmin の Jython スクリプトを使用して説明します。

ただし、PMI メトリクスを取得する前に、イントロスペクションの使用法、および MBean の JMX メソッドを (PerfMBean を使用して) 呼び出す方法を理解する必要があります。次のセクションでは、これらの方法を説明します。

イントロスペクションのパワー

一般に、イントロスペクションというのは、要素、コンポーネント、またはオブジェクトを検証し、それが何か、そこに何が含まれているのか、それが何をするものなのかを判断する機能を指します。イントロスペクション(英語)は、wsadmin および Jython を適切に実装する際に重要な役割を果たします。

wsadmin のイントロスペクション

wsadmin ユーティリティーには、以下の 5 つのスクリプト・オブジェクトが含まれています。

  • AdminControl: 実行オブジェクトを管理します。
  • AdminConfig: 構成オブジェクトを管理します。
  • AdminApp: アプリケーション・オブジェクトを管理します。
  • AdminTask: 反復作業や複雑な作業を容易にします。
  • Help: スクリプト・オブジェクトに関するヘルプを提供します。

Jython を使用して wsadmin を起動するためには、単純に <WAS_PATH>/wsadmin.sh -lang jython コマンドを入力します。

wsadmin の Help オブジェクトを使用すると、各オブジェクトに関する情報を表示することができます。使用するコマンドを以下に示します。

  • print Help()
  • print Help.help()
  • print Help.AdminControl()
  • print Help.AdminConfig()
  • print Help.AdminApp()
  • print Help.AdminTask()
  • print Help.operations( <object name string>)
  • print Help.attributes( <object name string>)

AdminConfig.types() を入力すると、既知のオブジェクト・タイプのほとんどすべてを表示することができます。「ほとんど」である理由は、AdminControl.queryNames('type=...') で使用可能なすべてのオブジェクト・タイプが、AdminConfig.types() と入力しても表示されるとは限らないからです。

リスト 1 に、Help.attributes() および Help.operations() の例を示します。この例では、JVM 型のすべての Mbean が列挙されて Jython リストに含められており、そして次に、JVM server1 のすべての属性およびメソッドが表示されています (jvmList[2])stats 属性および getStats() メソッドが、PMI データにとって重要です。

リスト 1. wsadmin のイントロスペクション: Help.attributes() および Help.operations()
$ /websphere/mywas/bin/wsadmin.sh -lang jython
WASX7209I: Connected to process "dmgr" on node Node01 using SOAP connector;  The type of 
process is: DeploymentManager
WASX7031I: For help, enter: "print Help.help()"
wsadmin>

wsadmin> jvmList = AdminControl.queryNames( 'type=JVM,*').split( lineSeparator)
['WebSphere:name=JVM,process=dmgr,platform=proxy,node=W2K300Dmgr,j2eeType=JVM,J2EEServer=
dmgr,version=7.0.0.5,type=JVM,mbeanIdentifier=JVM,cell=W2K300Cell,spec=1.0', 'WebSphere:
name=JVM,process=nodeagent,platform=proxy,node=W2K300Node01,j2eeType=JVM,J2EEServer=
nodeagent,version=7.0.0.5,type=JVM,mbeanIdentifier=JVM,cell=W2K300Cell,spec=1.0', 
'WebSphere:name=JVM,process=server1,platform=proxy,node=W2K300Node01,j2eeType=JVM,
J2EEServer=server1,version=7.0.0.5,type=JVM,mbeanIdentifier=JVM,cell=W2K300Cell,spec=1.0',
'WebSphere:name=JVM,process=server2,platform=proxy,node=W2K300Node01,j2eeType=JVM,
J2EEServer=server2,version=7.0.0.5,type=JVM,mbeanIdentifier=JVM,cell=W2K300Cell,spec=1.0']

wsadmin> print Help.attributes( jvmList[2])
Attribute                       Type                            Access
javaVendor                      java.lang.String                RO
javaVersion                     java.lang.String                RO
node                            java.lang.String                RO
heapSize                        java.lang.String                RO
freeMemory                      java.lang.String                RO
maxHeapDumpsOnDisk              java.lang.Integer               RW
maxMemory                       java.lang.String                RO
maxSystemDumpsOnDisk            java.lang.Integer               RW
stats                           javax.management.j2ee.statistics.Stats  RO
objectName                      java.lang.String                RO
stateManageable                 boolean                         RO
statisticsProvider              boolean                         RO
eventProvider                   boolean                         RO

wsadmin> print Help.operations( jvmList[2])
Operation
java.lang.String getJavaVendor()
java.lang.String getJavaVersion()
java.lang.String getJVMNode()
java.lang.String getTotalMemory()
java.lang.String getFreeMemory()
java.lang.Integer getMaxDumpsOnDisk()
void setMaxDumpsOnDisk(java.lang.Integer)
java.lang.String getMaxMemory()
java.lang.Integer getMaxSystemDumpsOnDisk()
void setMaxSystemDumpsOnDisk(java.lang.Integer)
void dumpThreads()
java.lang.String getProperty(java.lang.String)
java.lang.String getIPAddress(java.lang.String)
long getCurrentTimeInMillis()
java.lang.String generateSystemDump()
java.lang.String; generateSystemDump(java.lang.String)
java.lang.String generateHeapDump()
[Ljava.lang.String; generateHeapDumps()
[Ljava.lang.String; generateHeapDump(java.lang.String)
boolean isVerbose()
void setVerbose(boolean, java.lang.String)
javax.management.j2ee.statistics.Stats getStats()
java.lang.String getObjectNameStr()
boolean isStateManageable()
boolean isStatisticsProvider()
boolean isEventProvider()

wsadmin> jvmStr = AdminControl.queryNames( 'type=JVM,process=server1,*')
wsadmin> jvmStr
'WebSphere:name=JVM,process=server1,platform=proxy,node=W2K300Node01,j2eeType=JVM,
J2EEServer=server1,version=7.0.0.5,type=JVM,mbeanIdentifier=JVM,cell=W2K300Cell,spec=1.0'

リスト 2 に、AdminConfig.types() の例を示します。

リスト 2. wsadmin のイントロスペクション: AdminConfig.types()
wsadmin> print AdminConfig.types()
AccessPointGroup
ActivationSpec
ActivationSpecTemplateProps
ActivitySessionService
…
WorkManagerInfo
WorkManagerProvider
WorkManagerService
WorkloadManagementServer

wsadmin> [p for p in AdminConfig.types().split() if p.lower().find('pmi')>=0]
['PMIModule', 'PMIRMFilter', 'PMIRMFilterValue', 'PMIRequestMetrics', 'PMIService']

Python の構文 [var for var in …] は、リストの内包表記 (list comprehension) と呼ばれます (「参考文献」に挙げた Python Tutorial を参照してください)。

Jython および Java のイントロスペクション

Pythonの場合と同様、Jython でプログラミングする場合もイントロスペクションは重要です。Jython は Python オブジェクトおよび Java オブジェクトを操作することができるため、イントロスペクションを実行する方法には以下の 2 つがあります。

  • Python オブジェクトの場合:type() および dir() を使用して、Python でイントロスペクションを実行します。
  • Java オブジェクトの場合:getClass() および getMethods() を使用して、Java でイントロスペクションを実行します。

すべての Java オブジェクトは、class java.lang.Object および java.lang.Class から作成されているので (「参考文献」を参照)、それらのメソッドすべてに Jython からアクセスできることを忘れないでください。

では、実際に検証してみましょう。リスト 3 では、Jython を使用して wsadmin を起動し、次に dir() および type() を使用して、利用可能なオブジェクトを表示しています。

  • 既知のオブジェクトの取得: AdminApp、AdminConfig、…、sys、…
  • オブジェクトに対するクエリーの実行: dir(AdminApp)、dir(sys.version)
  • オブジェクトの型の取得: type(AdminApp)、type(sys.version)
リスト 3. Jython のイントロスペクション: dir() および type()
wsadmin> dir()
['AdminApp', 'AdminConfig', 'AdminControl', 'AdminTask', 'Help', 'LTPA_LDAPSecurityOff', 
'LTPA_LDAPSecurityOn', 'TypedProxy', '__doc__', '__name__', 'bsf', 'cellName', 
'checkuserpw', 'doAuthenticationMechanism', 'doGlobalSecurity', 
'doGlobalSecurityDisable', 'doLDAPUserRegistry', 'domainHostname', 'exportLTPAKey', 
'flag', 'forceSync', 'generateLTPAKeys', 'getLDAPUserRegistryId', 'getLTPAId', 
'getSecId', 'getSecurityAdminMbean', 'java', 'ldapPassword', 'ldapPort', 'ldapServer', 
'ldapServerId', 'ldapUserRegistryId', 'lineSeparator', 'ltpaId', 'nodeName', 
'secMbean', 'securityId', 'securityoff', 'securityon', 'sleep', 'sys', 'whatEnv']

wsadmin> dir( AdminApp)
[]

wsadmin> type( AdminApp)
<jclass org.python.core.PyJavaInstance at 522592038>

wsadmin> dir( sys)
['__delattr__', '__dict__', '__displayhook__', '__excepthook__', '__findattr__', 
'__setattr__', '__stderr__', '__stdin__', '__stdout__', '_getframe', 'add_classdir', 
'add_extdir', 'add_package', 'argv', 'builtin_module_names', 'builtins', 'cachedir', 
'classLoader', 'copyright', 'defaultencoding', 'displayhook', 'exc_info', 'excepthook', 
'exec_prefix', 'executable', 'exit', 'getClassLoader', 'getdefaultencoding', 
'hexversion', 'initialize', 'last_traceback', 'last_type', 'last_value', 'maxint', 
'minint', 'modules', 'packageManager', 'path', 'platform', 'prefix', 'profile', 
'profilefunc', 'ps1', 'ps2', 'registry', 'setClassLoader', 'setdefaultencoding', 
'setprofile', 'settrace', 'stderr', 'stdin', 'stdout', 'toString', 'trace', 
'tracefunc', 'version', 'version_info', 'warnoptions']

wsadmin> print sys.version
2.1

wsadmin> dir( sys.version)
[]

wsadmin> type( sys.version)
<jclass org.python.core.PyString at 469769216>

リスト 4 では、getClass() および getMethods() を使用して、JVM Mbean のメソッドを表示しています。

  • オブジェクト・ストリングの名前の検索: AdminControl.queryNames()
  • オブジェクト参照の取得: AdminControl.makeObjectName()
  • オブジェクトに対するクエリーの実行: <object>.getClass(), <object>.getMethods()

getClass() および getMethods() は、org.python.core.PyJavaInstance 型の Jython オブジェクトに対してのみ機能し、org.python.core.PyString 型の Jython オブジェクトに対しては機能しないことに注意してください。

リスト 4. Java のイントロスペクション: getClass() および getMethods()
wsadmin> type( jvmList)
<jclass org.python.core.PyList at 778972782>

wsadmin> type( jvmStr)
<jclass org.python.core.PyString at 1555061936>

wsadmin> jvmStr.getClass()
WASX7015E: Exception running command: "jvmList[2].getClass()"; exception information:
 com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
  File "<input>", line 1, in ?
AttributeError: 'string' object has no attribute 'getClass'

wsadmin> jvmObj = AdminControl.makeObjectName( jvmStr)
wsadmin> jvmObj
WebSphere:name=JVM,process=server1,platform=proxy,node=W2K300Node01,j2eeType=JVM,
J2EEServer=server1,version=7.0.0.5,type=JVM,mbeanIdentifier=JVM,cell=W2K300Cell,spec=1.0

wsadmin> type( jvmObj)
<jclass org.python.core.PyJavaInstance at 2093776076>

wsadmin> jvmObj.getClass()
<jclass javax.management.ObjectName at 1904111998>

wsadmin> type( jvmObj.getClass())
<jclass org.python.core.PyJavaClass at 1378767406>

wsadmin> type( jvmObj.getClass().getMethods())
<jclass org.python.core.PyArray at 90441060>

wsadmin> for i in jvmObj.getClass().getMethods(): print i
public boolean javax.management.ObjectName.equals(java.lang.Object)
public int javax.management.ObjectName.hashCode()
public java.lang.String javax.management.ObjectName.toString()
public boolean javax.management.ObjectName.isPattern()
public boolean javax.management.ObjectName.isDomainPattern()
public boolean javax.management.ObjectName.isPropertyPattern()
public boolean javax.management.ObjectName.isPropertyListPattern()
public boolean javax.management.ObjectName.isPropertyValuePattern()
public boolean javax.management.ObjectName.isPropertyValuePattern(java.lang.String) 
throws java.lang.NullPointerException,java.lang.IllegalArgumentException
public java.lang.String javax.management.ObjectName.getCanonicalName()
public java.lang.String javax.management.ObjectName.getDomain()
public java.lang.String javax.management.ObjectName.getKeyProperty(java.lang.String) 
throws java.lang.NullPointerException
public java.util.Hashtable javax.management.ObjectName.getKeyPropertyList()
public java.lang.String javax.management.ObjectName.getKeyPropertyListString()
...
public final native java.lang.Class java.lang.Object.getClass()
...

jvmObj が org.python.core.PyJavaInstance 型であること、つまり Java クラスの Jython 実装であることに注意してください。getClass() メソッドを使用すると、実際の Java クラス名 javax.management.ObjectName を取得することができます。

オブジェクト名

オブジェクト名というのは、AdminControl スクリプト・オブジェクトのコマンドの 1 つで制御することができるアクティブな JMX Mbean のことです。この構文は、以下のように標準的な JMX オブジェクト名の構文です。

domain:key=value,key=value,key=value,...

WebSphere Application Server の場合、ドメインは以下のように WebSphere です。

WebSphere:key=value,key=value,key=value,...

オブジェクト名を取得するためには、以下のコマンドを使用します。

  • AdminControl.queryNames( <string>) はストリングを返します。
  • AdminControl.makeObjectName( <string>) はオブジェクト名を返します。

つまり jvmObj は、javax.management.ObjectName 型のJava オブジェクトであり、目的の Mbean を指します。Mbean のメソッドを取得するために、jvmObj オブジェクトに対して getMethods() メソッドを直接使用することはできません。リスト 1 に示すように、Help.operations() を使用する必要があります。

PerfMBean を使用して MBean JMX メソッドを呼び出す

単純にするために、PMI に関連する Mbean を以下の 3 つに分けます。

  • PerfMBean: 他の MBean を管理、制御します。
  • StatisticsProvider: 統計情報を含んでいる stats 属性を提供する Mbean。
  • その他: stats 属性を持たない MBean。

イントロスペクションのパワーにより、Mbean のメソッドを呼び出すために必要なすべての情報を取得することができます。そのためには以下のことを行います。

  • Mbean のメソッドを一覧表示します。
  • 必要なパラメーターを判断します。
  • シグニチャーを作成します。

リスト 1 を見るとわかるように、JVM Mbean には stats 属性および getStats() メソッドがありますが、このメソッドを直接呼び出すことはできません (リスト 5)。

リスト 5. stats オブジェクトを直接取得しようとする
wsadmin> jvmObj.getStats()
WASX7015E: Exception running command: "jvmObj.getStats()"; exception information:
 com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
  File "<input>", line 1, in ?
AttributeError: getStats

Mbean のメソッドを実行するためには、以下の 2 つの方法のいずれかを使用する必要があります。

  • AdminControl.invoke(<mbeanStr>, 'method', <parameters>): この 'method' は <mbeanStr> のメソッドを呼び出します。
  • AdminControl.invoke_jmx( <perfObj>, 'method', <parameters>, <signature>): この 'method' は <perfObj> PerfMBean のメソッドを呼び出し、<parameters> には対象の <mbeanObj> の名前が含まれます。

AdminControl.invoke() メソッドを使用するためには、ストリングで表現された Mbean を入力する必要があります。これにより取得されるのは、ストリングで表現された stats オブジェクトです (リスト 6)。

リスト 6. ストリングで表現された stats オブジェクトを AdminControl.invoke() を使用して取得する
wsadmin>print statStr = AdminControl.invoke( jvmStr, 'getStats')
Stats name=jvmRuntimeModule, type=jvmRuntimeModule#
{
name=HeapSize, ID=1, description=The total memory (in KBytes) in the Java virtual 
machine run time., unit=KILOBYTE, type=BoundedRangeStatistic, lowWaterMark=51200, 
highWaterMark=70012, current=70012, integral=0.0, lowerBound=51200, upperBound=262144

name=UsedMemory, ID=3, description=The amount of used memory (in KBytes) in the Java 
virtual machine run time., unit=KILOBYTE, type=CountStatistic, count=69008

name=UpTime, ID=4, description=The amount of time (in seconds) that the Java virtual 
machine has been running., unit=SECOND, type=CountStatistic, count=77341

name=ProcessCpuUsage, ID=5, description=The CPU Usage (in percent) of the Java virtual 
machine., unit=N/A, type=CountStatistic, count=0
}

wsadmin>type( statStr)
<jclass org.python.core.PyString at 1555061936>

AdminControl.invoke_jmx() メソッドを使用するためには、オブジェクトで表現された MBean を入力する (javax.management.ObjectName と入力します) 必要があります。これにより取得されるのは、オブジェクトで表現された stats オブジェクトです。しかしこの場合には、この JVM と関連付けられた PerfMBean を使用する必要があり、PerfMBean を取得するためには getKeyPropertyList() を使用します (リスト 7)。

リスト 7. サーバーの PerfMBean を取得する
wsadmin> jvmObj.getKeyPropertyList()
{version=7.0.0.5, j2eeType=JVM, platform=proxy, mbeanIdentifier=JVM, process=server1, 
type=JVM, name=JVM, node=W2K300Node01, spec=1.0, J2EEServer=server1, cell=W2K300Cell}

wsadmin> jvmObj.getKeyPropertyList()['process']
'server1'

wsadmin> perfStr = AdminControl.queryNames('type=Perf,process=%s,*' % 
jvmObj.getKeyPropertyList()['process'])
'WebSphere:name=PerfMBean,process=server1,platform=dynamicproxy,node=W2K300Node01,
version=7.0.0.5,type=Perf,mbeanIdentifier=PerfMBean,cell=W2K300Cell,spec=1.0'

wsadmin>type( perfStr)
<jclass org.python.core.PyString at 1555061936>

wsadmin>perfObj = AdminControl.makeObjectName( perfStr)
wsadmin>perfObj
WebSphere:name=PerfMBean,process=server1,platform=dynamicproxy,node=W2K300Node01,
version=7.0.0.5,type=Perf,mbeanIdentifier=PerfMBean,cell=W2K300Cell,spec=1.0

wsadmin>type( perfObj)
<jclass org.python.core.PyJavaInstance at 1467504504>

これで、PerfMBean で利用可能なすべてのメソッドを一覧表示することができます (リスト 6)。

リスト 8. PerfMBean のメソッドを取得する
wsadmin>print Help.attributes( perfStr)
Attribute                       Type                            Access

wsadmin>print Help.operations( perfStr)
Operation
com.ibm.websphere.pmi.PmiModuleConfig getConfig(javax.management.ObjectName)
com.ibm.websphere.pmi.PmiModuleConfig getConfig(java.lang.String)
[Lcom.ibm.websphere.pmi.PmiModuleConfig; getConfigs(java.util.Locale)
com.ibm.websphere.pmi.stat.WSStats getStatsObject(javax.management.ObjectName, 
java.lang.Boolean)
[Lcom.ibm.websphere.pmi.stat.WSStats; getStatsArray([Ljavax.management.ObjectName;, 
java.lang.Boolean)
[Lcom.ibm.websphere.pmi.stat.WSStats; getStatsArray([Lcom.ibm.websphere.pmi.stat.
StatDescriptor;, java.lang.Boolean)
[Lcom.ibm.websphere.pmi.stat.MBeanLevelSpec; getInstrumentationLevel(javax.management.
ObjectName, java.lang.Boolean)
[Lcom.ibm.websphere.pmi.stat.StatLevelSpec; getInstrumentationLevel(com.ibm.websphere.
pmi.stat.StatDescriptor, java.lang.Boolean)
java.lang.String getStatisticSet()
java.lang.String getCustomSetString()
[Lcom.ibm.websphere.pmi.stat.StatDescriptor; listStatMembers(com.ibm.websphere.pmi.stat.
StatDescriptor, java.lang.Boolean)
void setInstrumentationLevel(com.ibm.websphere.pmi.stat.MBeanLevelSpec, java.lang.Boolean)
void setInstrumentationLevel([Lcom.ibm.websphere.pmi.stat.MBeanLevelSpec;, 
java.lang.Boolean)
void setInstrumentationLevel([Lcom.ibm.websphere.pmi.stat.StatLevelSpec;, 
java.lang.Boolean)
void setStatisticSet(java.lang.String)
void setCustomSetString(java.lang.String, java.lang.Boolean)
void savePMIConfiguration()
[Lcom.ibm.websphere.pmi.PmiModuleConfig; getConfigs()
com.ibm.websphere.pmi.stat.WSStats getStatsObject(com.ibm.websphere.pmi.stat.
MBeanStatDescriptor, java.lang.Boolean)
com.ibm.websphere.pmi.stat.WSStats getStatsObject(com.ibm.ws.pmi.server.DataDescriptor, 
java.lang.Boolean)
[Lcom.ibm.websphere.pmi.stat.WSStats; getStatsArray([Lcom.ibm.websphere.pmi.stat.
MBeanStatDescriptor;, java.lang.Boolean)
[Lcom.ibm.websphere.pmi.stat.WSStats; getStatsArray([Lcom.ibm.ws.pmi.server.
DataDescriptor;, java.lang.Boolean)
java.lang.String getStatsString(javax.management.ObjectName, java.lang.Boolean)
  <deprecated>
java.lang.String getStatsString(javax.management.ObjectName, java.lang.String, 
java.lang.Boolean)  <deprecated>
void setInstrumentationLevel(java.lang.String, java.lang.Boolean)
void setInstrumentationLevel(com.ibm.ws.pmi.server.PerfLevelDescriptor, java.lang.Boolean)
void setInstrumentationLevel([Lcom.ibm.ws.pmi.server.PerfLevelDescriptor;, 
java.lang.Boolean)
[Lcom.ibm.websphere.pmi.stat.MBeanLevelSpec; getInstrumentationLevel
(com.ibm.websphere.pmi.
stat.MBeanStatDescriptor, java.lang.Boolean)
[Lcom.ibm.ws.pmi.server.PerfLevelDescriptor; getInstrumentationLevel
(com.ibm.ws.pmi.server.
DataDescriptor, java.lang.Boolean)
java.lang.String getInstrumentationLevelString()  <deprecated>
[Lcom.ibm.websphere.pmi.stat.MBeanStatDescriptor; listStatMembers(javax.management.
ObjectName)
[Lcom.ibm.websphere.pmi.stat.MBeanStatDescriptor; listStatMembers(com.ibm.websphere.pmi.
stat.MBeanStatDescriptor)
[Lcom.ibm.ws.pmi.server.DataDescriptor; listStatMembers(com.ibm.ws.pmi.server.
DataDescriptor)
java.lang.String listStatMemberNames(javax.management.ObjectName)  <deprecated>

次に、PerfMBean から JMX の getStatsObject() メソッドを呼び出し、com.ibm.websphere.pmi.stat.WSStats オブジェクト (JVM Mbean の stats 属性) を取得します。

AdminControl.invoke_jmx() には以下の 4 つのパラメーターが必要です。

  1. 対象の Mbean を管理する、サーバーの PerfMbean オブジェクト。
  2. 呼び出しの対象となる、PerfMBean のメソッド。
  3. Help.operations() を使用して取得できる、呼び出されるメソッドのパラメーター。
  4. パラメーターの「シグニチャー」。つまり各パラメーターの型であり、同じく Help.operations() を使用して取得することができます。

getStatsObject() に 3 つのバージョンがあり、それぞれ 3 つの異なるシグニチャーを使用することに気付いた人がいるかもしれません。皆さんにとって容易な任意のバージョンを使用して構いませんが、一部は非推奨となっていることに注意してください。

では、JVM MBean の stats 属性をオブジェクト形式で取得しましょう。メソッドとして、非推奨ではない getStatsObject() メソッド である com.ibm.websphere.pmi.stat.WSStats getStatsObject(javax.management.ObjectName, java.lang.Boolean) を使用します (リスト 9)。

リスト 9. JVM MBean の stats 属性を「オブジェクト」形式で取得する
wsadmin> params = [ jvmObj, java.lang.Boolean ('true')]

wsadmin> sigs = ['javax.management.ObjectName', 'java.lang.Boolean']

wsadmin> jvmStats = AdminControl.invoke_jmx( perfObj, 'getStatsObject', params, sigs)
Stats name=jvmRuntimeModule, type=jvmRuntimeModule#
{
name=HeapSize, ID=1, description=The total memory (in KBytes) in the Java virtual 
machine run time., unit=KILOBYTE, type=BoundedRangeStatistic, lowWaterMark=51200, 
highWaterMark=60149, current=60149, integral=0.0, lowerBound=51200, upperBound=262144
name=UsedMemory, ID=3, description=The amount of used memory (in KBytes) in the Java 
virtual machine run time., unit=KILOBYTE, type=CountStatistic, count=59102
name=UpTime, ID=4, description=The amount of time (in seconds) that the Java virtual 
machine has been running., unit=SECOND, type=CountStatistic, count=19513005
name=ProcessCpuUsage, ID=5, description=The CPU Usage (in percent) of the Java virtual 
machine., unit=N/A, type=CountStatistic, count=0
}

stats オブジェクトの型およびメソッドを調べる方法を、リスト 10 に示します。

リスト 10. イントロスペクションを使用して stats オブジェクトを分析する
wsadmin> type (jvmStats)
<jclass org.python.core.PyJavaInstance at 1671979944>

wsadmin>jvmStats.getClass()
<jclass com.ibm.ws.pmi.stat.StatsImpl at 1708942812>

wsadmin> for i in jvmStats.getClass().getMethods(): print i

public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public java.lang.String com.ibm.ws.pmi.stat.StatsImpl.toString()
public java.lang.String com.ibm.ws.pmi.stat.StatsImpl.getName()
public int com.ibm.ws.pmi.stat.StatsImpl.numStatistics()
…
public com.ibm.websphere.pmi.stat.WSStatistic 
	com.ibm.ws.pmi.stat.StatsImpl.getStatistic(int)
public com.ibm.websphere.pmi.stat.WSStatistic 
	com.ibm.ws.pmi.stat.StatsImpl.getStatistic(java.lang.String)
public com.ibm.websphere.pmi.stat.WSStatistic[] 
	com.ibm.ws.pmi.stat.StatsImpl.getStatistics()
public com.ibm.websphere.pmi.stat.WSStatistic[] 
	com.ibm.ws.pmi.stat.StatsImpl.listStatistics()
public java.lang.String[] com.ibm.ws.pmi.stat.StatsImpl.listStatisticNames()
public java.lang.String[] com.ibm.ws.pmi.stat.StatsImpl.getStatisticNames()
public com.ibm.ws.pmi.stat.StatisticImpl 
	com.ibm.ws.pmi.stat.StatsImpl.getJ2EEStatistic(java.lang.String)
public com.ibm.ws.pmi.stat.StatisticImpl[] 
	com.ibm.ws.pmi.stat.StatsImpl.getJ2EEStatistics()
public java.lang.String[] com.ibm.ws.pmi.stat.StatsImpl.getJ2EEStatisticNames()
...

これで、以下のメソッドを使用して stats オブジェクトから情報を取得することができます。

  • numStatistics(): 利用可能な PMI メトリクスの数を返します。
  • getJ2EEStatistics(): 利用可能な PMI メトリクスをすべて取得します。
  • toXML(): XML フォーマットで利用可能な PMI メトリクスをすべて取得します。
リスト 11. stats オブジェクトから統計情報をすべて取得する
wsadmin> jvmStats.numStatistics()
4

wsadmin> jvmStats.listStatisticNames()
array(['HeapSize', 'UsedMemory', 'UpTime', 'ProcessCpuUsage'], java.lang.String)

wsadmin> print jvmStats.toXML()
<Stats name="jvmRuntimeModule" statType="jvmRuntimeModule#" il="-2" type="COLLECTION">
<BRS id="1" lWM="51200" hWM="60149" cur="60149" int="0.0" sT="1269269566329" 
	lST="1288782571946" lB="51200" uB="262144">
</BRS>
<CS id="3" sT="1269269566327" lST="1288867956052" ct="48753">
</CS>
<CS id="4" sT="1269269566327" lST="1288867956052" ct="19598389">
</CS>
<CS id="5" sT="1269269566319" lST="1288867956052" ct="0">
</CS>
</Stats>

wsadmin> jvmStats.getJ2EEStatistics()
array([name=HeapSize, ID=1, description=The total memory (in KBytes) in the Java virtual 
machine run time., unit=KILOBYTE, type=BoundedRangeStatistic, lowWaterMark=51200, 
highWaterMark=60149, current=60149, integral=0.0, lowerBound=51200, upperBound=262144, 
name=UsedMemory, ID=3, description=The amount of used memory (in KBytes) in the Java 
virtual machine run time., unit=KILOBYTE, type=CountStatistic, count=48753, name=UpTime, 
ID=4, description=The amount of time (in seconds) that the Java virtual machine has been 
running., unit=SECOND, type=CountStatistic, count=19598389, name=ProcessCpuUsage, ID=5, 
description=The CPU Usage (in percent) of the Java virtual machine., unit=N/A, 
type=CountStatistic, count=0], com.ibm.ws.pmi.stat.StatisticImpl)

最後に呼び出した getJ2EEStatistics() メソッドにより、さまざまなタイプの統計情報があることがわかります。実際には、以下に示す 5 つのタイプの statistic オブジェクトがあります (ここでは、それらのオブジェクトのメソッドも併せて示します)。

  • Stats: getStatistics(), getStatistic(), getStatisticNames(), getSubStats()
  • CountStatistic: getCount()
  • TimeStatistic: getCount(), getMean()
  • RangeStatistic: getCurrent(), getMean()
  • BoundedRangeStatistic: getCurrent(), getMean()
リスト 12. さまざまな種類の統計情報
wsadmin> for i in jvmStats.listStatisticNames(): 
wsadmin>   print i, jvmStats.getJ2EEStatistic( i).getClass()HeapSizecom.ibm.ws.pmi.stat.BoundedRangeStatisticImplUsedMemorycom.ibm.ws.pmi.stat.CountStatisticImplUpTimecom.ibm.ws.pmi.stat.CountStatisticImplProcessCpuUsagecom.ibm.ws.pmi.stat.CountStatisticImpl

以下のメソッドを使用すると、stats オブジェクトから個別の統計情報を取得することができます。

  • getJ2EEStatistic(): 1 つの PMI メトリクスを取得します。
  • getStatistic(): 1 つの PMI メトリクスを取得します。
  • getCurrent(), getMean(): BoundedRangeStatistic メトリクスのデータを取得します。
  • getCount(): CountStatistic メトリクスのデータを取得します。
リスト 13. stats オブジェクトから 1 つの統計情報を取得する
wsadmin> for i in jvmStats.listStatisticNames(): print i, jvmStats.getJ2EEStatistic( i)

HeapSizename=HeapSize, ID=1, description=The total memory (in KBytes) in the Java 
virtual machine run time., unit=KILOBYTE, type=BoundedRangeStatistic, lowWaterMark=
51200, highWaterMark=60149, current=51200, integral=2.6248472575011E13, lowerBound=
51200, upperBound=262144
UsedMemoryname=UsedMemory, ID=3, description=The amount of used memory (in KBytes) in 
the Java virtual machine run time., unit=KILOBYTE, type=CountStatistic, count=38213
UpTimename=UpTime, ID=4, description=The amount of time (in seconds) that the Java 
virtual machine has been running., unit=SECOND, type=CountStatistic, count=20028681
ProcessCpuUsagename=ProcessCpuUsage, ID=5, description=The CPU Usage (in percent) of the 
Java virtual machine., unit=N/A, type=CountStatistic, count=0

wsadmin> jvmStats.getJ2EEStatistic('HeapSize')
name=HeapSize, ID=1, description=The total memory (in KBytes) in the Java virtual 
machine run time., unit=KILOBYTE, type=BoundedRangeStatistic, lowWaterMark=51200, 
highWaterMark=60149, current=60149, integral=0.0, lowerBound=51200, upperBound=262144

wsadmin> jvmStats.getJ2EEStatistic('HeapSize').getClass()
<jclass com.ibm.ws.pmi.stat.BoundedRangeStatisticImpl at 250875636>

wsadmin> for i in jvmStats.getJ2EEStatistic( 'HeapSize').getClass().getMethods(): print i
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public java.lang.String com.ibm.ws.pmi.stat.BoundedRangeStatisticImpl.toString()
public int com.ibm.ws.pmi.stat.BoundedRangeStatisticImpl.getStatisticType()
public java.lang.String com.ibm.ws.pmi.stat.StatisticImpl.getName()
public java.lang.String com.ibm.ws.pmi.stat.StatisticImpl.getUnit()
public java.lang.String com.ibm.ws.pmi.stat.StatisticImpl.getDescription()
…
public java.lang.String com.ibm.ws.pmi.stat.BoundedRangeStatisticImpl.toXML()
…
public long com.ibm.ws.pmi.stat.RangeStatisticImpl.getCurrent()
…
public double com.ibm.ws.pmi.stat.RangeStatisticImpl.getMean()
…

wsadmin> jvmStats.getStatistic( 'HeapSize')
name=HeapSize, ID=1, description=The total memory (in KBytes) in the Java virtual machine 
run time., unit=KILOBYTE, type=BoundedRangeStatistic, lowWaterMark=51200, highWaterMark=
60149, current=51200, integral=2.6248472575011E13, lowerBound=51200, upperBound=262144

wsadmin> jvmStats.getStatistic( 'HeapSize').getClass()
<jclass com.ibm.ws.pmi.stat.BoundedRangeStatisticImpl at 165808610>

wsadmin> jvmStats.getStatistic( 'HeapSize').getCurrent()
51200L

wsadmin> jvmStats.getStatistic( 'HeapSize').getMean()
1315.7527162741048

wsadmin> jvmStats.getStatistic( 'UpTime')
name=UpTime, ID=4, description=The amount of time (in seconds) that the Java virtual 
machine has been running., unit=SECOND, type=CountStatistic, count=19598389

wsadmin>jvmStats.getStatistic( 'UpTime').getClass()
<jclass com.ibm.ws.pmi.stat.CountStatisticImpl at 1288981716>

wsadmin> jvmStats.getStatistic( 'UpTime').getCount()
19598389L

以上のように、イントロスペクションを使用すると、面倒なストリングの構文解析をしなくても JVM の Mbean の stats 属性を深く理解することができ、必要な情報をすべて取得することができます。

次に、PMI データを簡単に取得できることを学びましょう。

wsadmin を使用して PMI メトリクスを取得する

Tivoli Performance Viewer をガイドとして使用すると、wsadmin および Jython を使用して PMI メトリクスを収集する作業が非常に容易になります。図 3 に、利用可能なサーバーを Tivoli Performance Viewer を使用して表示した場合を示します。

図 3. PMI に利用可能なサーバーを表示する (TPV を使用した場合)
PMI に利用可能なサーバーを表示する (TPV を使用した場合)
PMI に利用可能なサーバーを表示する (TPV を使用した場合)

同じ内容を wsadmin を使用して表示すると、Perf 型の JMX Mbean が 3 つ利用可能であることがわかります (リスト 14)。

リスト 14. PMI に利用可能なサーバーを表示する (wsadmin を使用した場合)
wsadmin>print AdminControl.queryNames('type=Perf,*')
WebSphere:name=PerfMBean,process=nodeagent,platform=dynamicproxy,node=W2K300Node01,
version=7.0.0.0,type=Perf,mbeanIdentifier=PerfMBean,cell=
W2K300Cell01,spec=1.0
WebSphere:name=PerfMBean,process=server1,platform=dynamicproxy,node=W2K300Node01,
version=7.0.0.0,type=Perf,mbeanIdentifier=PerfMBean,cell=W2
K300Cell01,spec=1.0
WebSphere:name=PerfMBean,process=server2,platform=dynamicproxy,node=W2K300Node01,
version=7.0.0.0,type=Perf,mbeanIdentifier=PerfMBean,cell=W2
K300Cell01,spec=1.0

一例として、server1 を選択しましょう。Performance モジュールの階層構造の最上位レベルが表示されます。

図 4. サーバーの最上位レベルのモジュールを表示する (TPV を使用した場合)
サーバーの最上位レベルのモジュールを表示する (TPV を使用した場合)
サーバーの最上位レベルのモジュールを表示する (TPV を使用した場合)

同じ内容を wsadmin を使用して表示するためには、サーバーの MBean のオブジェクト名と、それに対応する PerfMBean のオブジェクト名を取得する必要があります。最後に、JMX のメソッド getStatsObject() を (2 番目のパラメーターを true に設定して) 呼び出し、このサーバーのすべての PMI メトリクスを取得します (リスト 15)。

リスト 15. サーバーの最上位レベルのモジュールを表示する (wsadminを使用した場合)
wsadmin> perfStr = AdminControl.queryNames( 'type=Perf,process=server1,
node=W2K300Node01,*')
wsadmin> perfStr
'WebSphere:name=PerfMBean,process=server1,platform=dynamicproxy,node=W2K300Node01,
version=7.0.0.0,type=Perf,mbeanIdentifier=PerfMBean,cell=W
2K300Cell01,spec=1.0'
wsadmin> perfObj = AdminControl.makeObjectName( perfStr)

wsadmin> srvrStr = AdminControl.queryNames( 'type=Server,name=server1, node=
W2K300Node01,*')
wsadmin> srvrStr
'WebSphere:name=server1,process=server1,platform=proxy,node=W2K300Node01,j2eeType=
J2EEServer,version=7.0.0.0,type=Server,mbeanIdentifier=cel
ls/W2K300Cell01/nodes/W2K300Node01/servers/server1/server.xml#Server_1300047119203,
cell=W2K300Cell01,spec=1.0,processType=ManagedProcess'
wsadmin> srvrObj = AdminControl.makeObjectName( srvrStr)

wsadmin> type( perfObj)

wsadmin> stats = AdminControl.invoke_jmx( perfObj, 'getStatsObject', [ srvrObj, 
java.lang.Boolean('true')], ['javax.management.ObjectName', 'java.lang.Boolean'])

wsadmin>for i in stats.subCollections(): print i.getName()
wsadmin>
DCSStats.Group
ExtensionRegistryStats.name
Security Authentication
Security Authorization
SipContainerModule
cacheModule
connectionPoolModule
hamanagerModule
jvmRuntimeModule
objectPoolModule
orbPerfModule
servletSessionsModule
threadPoolModule
transactionModule
webAppModule
wlmModule

さらに下位のレベルに進み、Tivoli Performance Viewer で JDBC Connection Pools モジュールを選択すると、このモジュールのサブモジュールを表示することができます (図 5)。

図 5. サーバーのサブモジュール・レベルを表示する (TPVを使用した場合)
サーバーのサブモジュール・レベルを表示する (TPVを使用した場合)
サーバーのサブモジュール・レベルを表示する (TPVを使用した場合)

既にサーバーのメトリクスはすべて取得できているので、同じ内容を wsadmin を使用して表示することも容易です (リスト 16)。

リスト 16. サーバーのサブモジュール・レベルを表示する (wsadminを使用した場合)
wsadmin>for i in stats.getStats('connectionPoolModule').subCollections(): print 
i.getName()
wsadmin>
Derby JDBC Provider
Derby JDBC Provider (XA)

図 6 (Tivoli Performance Viewer を使用した場合) およびリスト 17 (wsadmin を使用した場合) に示すように、さらに 1 レベル下を表示することもできます。

図 6. 最上位から 2 レベル下にあるサーバーのサブモジュールを表示する (TPV を使用した場合)
最上位から 2 レベル下にあるサーバーのサブモジュールを表示する (TPV を使用した場合)
最上位から 2 レベル下にあるサーバーのサブモジュールを表示する (TPV を使用した場合)
リスト 17. 最上位から 2 レベル下にあるサーバーのサブモジュールを表示する (wsadmin を使用した場合)
wsadmin> for i in stats.getStats('connectionPoolModule').getStats('Derby JDBC 
Provider').subCollections(): print i.getName()
wsadmin>
DefaultDatasource

これで、メトリクスを収集する準備が整いました。最初に Tivoli Performance Viewer を使用する方法を示します (図 7)。

図 7. サーバーのモジュールのメトリクスを表示する (TPV を使用した場合)
サーバーのモジュールのメトリクスを表示する (TPV を使用した場合)
サーバーのモジュールのメトリクスを表示する (TPV を使用した場合)

同じ内容を wsadmin を使用して表示するためには、メソッドとして listStatisticNames()、getStatistic()、getCount()、getName() を使用します (リスト 18)

リスト 18. サーバーのモジュールのメトリクスを表示する (wsadmin を使用した場合)
wsadmin> stats.getStats('connectionPoolModule').getStats('Derby JDBC Provider').
getStats('DefaultDatasource').listStatisticNames()
array(['CreateCount', 'CloseCount', 'PoolSize', 'FreePoolSize', 'WaitingThreadCount', 
'PercentUsed', 'UseTime', 'WaitTime'], java.lang.String)

wsadmin> stats.getStats('connectionPoolModule').getStats('Derby JDBC Provider').
getStats('DefaultDatasource').getStatistic('CreateCount')
name=CreateCount, ID=1, description=Nombre total de connexions créées., unit=N/A, 
type=CountStatistic, count=0

wsadmin> stats.getStats('connectionPoolModule').getStats('Derby JDBC Provider').
getStats('DefaultDatasource').getStatistic('CreateCount').getCount()
0L

wsadmin> stats.getStats('connectionPoolModule').getStats('Derby JDBC Provider').
getStats('DefaultDatasource').getStatistic('CreateCount').getName()
'CreateCount'

簡単だと思いませんか。

PMI についての説明のまとめとして、いよいよ PMIService および PMIModule について調べましょう。

PMIService および PMIModule

以下のように、PMIService および PMIModule は、どちらも構成エンティティーです。

  • PMIService は、WebSphere Application Server のサービス・エンティティーであり、server.xml 構成ファイルで定義されます。
  • PMIModule は、PMIService の一部であり、そのサーバーの PMI の構成です (つまり「console (コンソール)」 > 「PMI」 > 「Configuration tree (構成ツリー)」の順に選択した場合に表示される内容です)。

PMIService は、それぞれの WebSphere Application Server で利用可能です。PMIService の構成ファイルは server.xml であり、その属性には enable や statisticset などがあります。PMIService が有効になると、そのアプリケーション・サーバー用の PMI サービスが開始されます。

PMIModule の構成ファイルは pmi-config.xml です。PMIService が起動すると、pmi-config.xml ファイルに記述された PMIModule の情報を読み取ります。

リスト 19. すべての PMIService の一覧表示
wsadmin> print AdminConfig.list( 'PMIService')
(cells/W2K300Cell/nodes/nodedmgr/servers/dmgr|server.xml#PMIService_1)
(cells/W2K300Cell/nodes/node1/servers/server1|server.xml#PMIService_1264758602928)
(cells/W2K300Cell/nodes/node1/servers/nodeagent|server.xml#PMIService_1264758899663)

リスト 20 を見ると、dmgr で PMIService が有効になっていないこと (enable false)、また収集されるメトリクスのレベル (statiscticSet basic) もわかります。

リスト 20. Deployment Manager での PMIService の状態
wsadmin> print AdminConfig.show( '(cells/W2K300Cell/nodes/nodedmgr/servers/dmgr|
server.xml#PMIService_1)')
[context dmgr(cells/W2K300Cell/nodes/nodedmgr/servers/dmgr|server.xml#Server_1)]
[enable false]
[initialSpecLevel []]
[properties []]
[statisticSet basic]
[synchronizedUpdate false]
リスト 21. Application Server での PMIService の状態
wsadmin> print AdminConfig.show( '(cells/W2K300Cell/nodes/node1/servers/server1|
server.xml#PMIService_1264758602928)')
[context server1(cells/W2K300Cell/nodes/node1/servers/server1|server.xml
#Server_1264758602924)]
[enable true]
[initialSpecLevel []]
[properties []]
[statisticSet basic]
[synchronizedUpdate false]
リスト 22. NodeAgent での PMIService の状態
wsadmin> print AdminConfig.show( '(cells/W2K300Cell/nodes/node1/servers/nodeagent|
server.xml#PMIService_1264758899663)')
[context nodeagent(cells/W2K300Cell/nodes/node1/servers/nodeagent|server.xml
#Server_1264758899663)]
[enable true]
[initialSpecLevel []]
[properties []]
[statisticSet basic]
[synchronizedUpdate false]

PMIModule は、PMIService が有効になっている 2 つのサーバーで利用可能です (リスト 23)。

リスト 23. すべての PMIModule の一覧表示
wsadmin> print AdminConfig.list( 'PMIModule')
(cells/W2K300Cell/nodes/node1/servers/server1|pmi-config.xml#PMIModule_1075747243635)
(cells/W2K300Cell/nodes/node1/servers/nodeagent|pmi-config.xml#PMIModule_1)

PMIModule のすべての属性を表示するためには、以下のいずれかを使用します。

  • AdminConfig.show: 最初のレベルの情報
  • AdminConfig.showall: すべてのレベルの情報
リスト 24. PMIModule のすべての属性
wsadmin> pmimodule = '(cells/W2K300Cell/nodes/node1/servers/server1|pmi-config.xml
#PMIModule_1075747243635)'

wsadmin> print AdminConfig.show( pmimodule)
[enable []]
[moduleName pmi]
[pmimodules "[(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|
pmi-config.xml#PMIModule_101) 
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_102)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_103)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_104)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_105)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_127)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_106)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_111)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_114)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_115)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_116)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_117)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_128)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_129)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_118)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_119)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_120)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_121)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_122)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_123)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_124)
(cells/CEDmgr01/nodes/NDclay111p6Node01/servers/ASNode01-01|pmi-config.xml#PMIModule_126)
]"]
[type []]

wsadmin> print AdminConfig.showall( pmimodule)
[enable []]
[moduleName pmi]
[pmimodules "[[[enable []]
[moduleName alarmManagerModule]
[pmimodules []]
[type alarmManagerModule]] [[enable 35,34,9,1,26,11,12,2,25]
[moduleName beanModule]
[pmimodules []]
[type beanModule#]] [[enable []]
[moduleName cacheModule]
[pmimodules "[[[enable []]
[moduleName *]
[pmimodules "[[[enable []]
[moduleName cacheModule.template]
[pmimodules []]
[type com.ibm.websphere.pmi.xml.cacheModule_template]] [[enable []]
...

まとめ

この記事には主に 2 つの目的がありました。1 つ目は、Jython で wsadmin を使用する場合、イントロスペクションが非常に有効なことを示すことです。そして 2 つ目は、Performance and Monitoring Infrastructure を活用するために、wsadmin および Jython を使用して PMI データを収集するための容易で効率的な方法を見つけることでした。

謝辞

この記事を校閲くださった Robert (Bob) Gibson 氏と Vishal Charegaonkar 氏に特に感謝いたします。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=827669
ArticleTitle=WebSphere Application Server V8 での JVM の更新: wsadmin および Jython を使用して WebSphere Application Server の PMI データを容易に収集し、レポートする
publish-date=08022012