利用 wsadmin 工具來啟用 PMI

瞭解如何使用指令行而非管理主控台來啟用「效能監視基礎架構」。

關於此作業

您可以利用指令行來啟用「效能監視基礎架構 (PMI)」。

程序

執行 wsadmin 指令。
當使用 wsadmin 時,您可以對 Perf Mbean 呼叫作業來取得 PMI 資料,設定或取得 PMI 監視層次,以及啟用資料計數器。
附註: 如果尚未啟用 PMI 資料,您需要先在 Perf MBean 上呼叫 setInstrumentation層次作業來啟用 PMI 資料。

wsadmin 中,可以使用 Perf MBean 中的下列作業:

/** Get performance data information for stats */
public void getConfig (ObjectName mbean);

/** Returns the current statistic set */
public void getStatisticSet ();

/** Enable PMI data using the pre-defined statistic sets.
    Valid values for the statistic set are "basic", "extended", "all", and "none" */
public void setStatisticSet (String statisticSet);

/** Returns the current custom set specification as a string */
public void getCustomSetString ();

/** Customizing PMI data that is enabled using fine-grained control. 
    This method allows to enable or disable statistics selectively.
    The format of the custom set specification string is STATS_NAME=ID1,ID2,ID3 seperated by ':', 
		where STATS_NAME and IDs are defined in WS*Stat interfaces in com.ibm.websphere.pmi.stat package. 
    Use * to enable all the statistics in the given PMI module. For example, to enable all the statistics 
		for JVM and active count, pool size for thread pool use: jvmRuntimeModule=*:threadPoolModule=3,4. 
    The string jvmRuntimeModule is the value of the constant WSJVMStats.NAME and threadPoolModule is the 
value of WSThreadPoolStats.NAME.
 */
public void setCustomSetString (String customSpec, Boolean recursive);

/** Get stats for an MBean*/
public void getStatsObject (ObjectName mbean, Boolean recursive);

/** Set instrumentation level using String format.
    This should be used by scripting for an easy String processing. 
    The level STR is a list of moduleName=Level connected by ":".
    NOTE: This method is deprecated in an earlier version. */
public void setInstrumentationLevel(String levelStr, Boolean recursive);  


/** Get instrumentation level in String for all the top-level modules. 
    This should be used by scripting for an easy String processing.
    NOTE: This method is deprecated in in an earlier version. */
public String getInstrumentationLevelString();     

/** Return the PMI data in String 
    NOTE: This method is deprecated in in an earlier version.
 */     
public String getStatsString(ObjectName on, Boolean recursive);      

/** Return the PMI data in String      
    Used for PMI modules/submodules without direct MBean mappings.      
    NOTE: This method is deprecated in in an earlier version.
 */     
public String getStatsString(ObjectName on, String submoduleName, Boolean recursive);

/** Return the submodule names if any for the MBean      
    NOTE: This method is deprecated in in an earlier version.
 */
public String listStatMemberNames(ObjectName on);
如果某個 MBean 是 StatisticProvider,且您將它的 ObjectName 傳給 getStatsObject,您會取得該 MBean 的統計資料。 具有下列 MBean 類型的 MBean 是統計資料提供者:
  • DynaCache
  • EJBModule
  • EntityBean
  • JDBCProvider
  • J2CResourceAdapter
  • JVM
  • MessageDrivenBean
  • ORB
  • 伺服器
  • SessionManager
  • StatefulSessionBean
  • StatelessSessionBean
  • SystemMetrics
  • ThreadPool
  • TransactionService
  • WebModule
  • Servlet
  • WLMAppServer
  • WebServicesService
  • WSGW

範例

請利用下列範例 Jacl 指令搭配 wsadmin 工具來取得 PMI 資料:

取得 Perf MBean ObjectName
wsadmin>set perfName [$AdminControl completeObjectName type=Perf,*]
wsadmin>set perfOName [$AdminControl makeObjectName $perfName]

呼叫 getStatisticSet 作業

使用此方法來尋找有效的統計資料集:

wsadmin> $AdminControl invoke $perfName getStatisticSet

這個方法會傳回下列值之一:basic、extended、all、none。

呼叫 setStatisticSet 作業

使用此方法,可以透過使用統計資料集來啟用監視。

有效的統計資料集值如下:basic、extended、all、none。

wsadmin> set params [java::new {java.lang.Object[]} 1]
wsadmin> $params set 0 [java::new java.lang.String extended]
wsadmin> set sigs  [java::new {java.lang.String[]} 1]
wsadmin> $sigs set 0 java.lang.String
wsadmin> $AdminControl invoke_jmx $perfOName setStatisticSet $params $sigs

呼叫 getConfig 作業

使用此方法,可以尋找元件的統計資料相關資訊。

wsadmin> set jvmName [$AdminControl completeObjectName type=JVM,*]

wsadmin> set params [java::new {java.lang.Object[]} 1] 
wsadmin> $params set 0 [java::new javax.management.ObjectName $jvmName]
wsadmin> set sigs  [java::new {java.lang.String[]} 1]
wsadmin> $sigs set 0 javax.management.ObjectName

wsadmin> $AdminControl invoke_jmx $perfOName getConfig $params $sigs

這個方法會傳回下列內容:

    Stats type=jvmRuntimeModule, Description=The performance data from 
the Java virtual machine run time.

    {name=UpTime, ID=4, type=CountStatistic, description=The amount of 
time (in seconds) that the Java virtual machine has been running., 
unit=SECOND, level=low, statisticSet=basic, resettable=false, 
aggregatable=true}

    {name=UsedMemory, ID=3, type=CountStatistic, description=The amount 
of used memory (in KBytes) in the Java virtual machine run time., 
unit=KILOBYTE, level=low,
    statisticSet=basic, resettable=false, aggregatable=true}

    {name=FreeMemory, ID=2, type=CountStatistic, description=The free 
memory (in KBytes) in the Java virtual machine run time., 
unit=KILOBYTE, level=low, statisticSet=all, resettable=false, 
aggregatable=true}

    {name=HeapSize, ID=1, type=BoundedRangeStatistic, description=The 
total memory (in KBytes) in the Java virtual machine run time., 
unit=KILOBYTE, level=high, statisticSet=basic, resettable=false, 
aggregatable=true}

呼叫 getCustomSetString 作業

這個作業提供字串格式的現行監視規格:

wsadmin> $AdminControl invoke $perfName getCustomSetString

輸出看起來類似下列內容:

    jvmRuntimeModule=4,3,1:systemModule=2,1:threadPoolModule=4,3:thread
PoolModule>HAManager.thread.pool=4,3:threadPoolModule>MessageListenerTh
readPool=4,3:threadPoolModule>ORB.thread.pool=4,3:threadPoolModule>Serv
let.Engine.Transports=4,3:threadPoolModule>TCS_DEFAULT=4,3:transactionM
odule=4,19,16,18,3,7,6,1,14

這個輸出指出在 JVM 元件中啟用了統計資料 ID 1、3 和 4。 使用先前的 getConfig 作業或使用 API 文件,可以找到統計資料 ID 的說明。 輸出包含整個伺服器的現行監視規格。 個別模組用 : 來區隔,> 用來作為模組內的分隔字元。

呼叫 setCustomSetString 作業

這個作業可用來選擇性地啟用或停用統計資料。 在下列指令中,針對 JVM 模組啟用統計資料 ID 1、2、3 及 4。 若要啟用所有統計資料 ID ,請使用星號 (*)。

wsadmin> set params [java::new {java.lang.Object[]} 2] 
wsadmin> $params set 0 [java::new java.lang.String jvmRuntimeModule=1,2,3,4]
wsadmin> $params set 1 [java::new java.lang.Boolean false]

wsadmin> set sigs  [java::new {java.lang.String[]} 2]
wsadmin> $sigs set 0 java.lang.String
wsadmin> $sigs set 1 java.lang.Boolean

wsadmin> $AdminControl invoke_jmx $perfOName setCustomSetString $params $sigs

呼叫 getStatsObject 作業

這項作業用來取得 MBean 的統計資料。 下列範例會取得 JVM 的統計資料:

wsadmin> set jvmName [$AdminControl completeObjectName type=JVM,*]
wsadmin> set params [java::new {java.lang.Object[]} 2] 
wsadmin> $params set 0 [java::new javax.management.ObjectName $jvmName]
wsadmin> $params set 1 [java::new java.lang.Boolean false]
wsadmin> set sigs  [java::new {java.lang.String[]} 2]
wsadmin> $sigs set 0 javax.management.ObjectName
wsadmin> $sigs set 1 java.lang.Boolean
wsadmin> $AdminControl invoke_jmx $perfOName getStatsObject $params 
$sigs
Stats name=jvmRuntimeModule, type=jvmRuntimeModule#
    {
    name=HeapSize, ID=1, description=The total memory (in KBytes) in 
Java 虛擬機器執行時間。 unit = KILOBYTE , type=BoundedRangeStatistic , lowWaterMark=51200, 
highWaterMark=263038, current=263038, integral=2.494158617766E12, lowerBound
=51200, upperBound=262144

    name=FreeMemory, ID=2, description=The free memory (in KBytes) in 
Java 虛擬機器執行時間。 unit = KILOBYTE , type=CountStatistic, 
count=53509

    name=UsedMemory, ID=3, description=The amount of used memory (in KBytes) in 
Java 虛擬機器執行時間。 unit = KILOBYTE , 
type=CountStatistic, count=209528

    name=UpTime, ID=4, description=The amount of time (in seconds) that 
Java 虛擬機器已在執行中。 unit = SECOND , 
type=CountStatistic, count=83050
}

呼叫 getInstrumentationLevelString 作業

請使用 invoke ,因為它沒有參數。

wsadmin>$AdminControl invoke $perfName getInstrumentationLevelString
這個指令會傳回下列內容:
beanModule=H:cacheModule=H:connectionPoolModule=H:j2cModule=H:jvmRu
ntimeModule=H:orbPerfModule=H:servletSessionsModule=H:systemModule=
H:threadPoolModule=H:transactionModule=H:webAppModule=H
附註: 您可以變更前一個字串中的層次 (n、l、m、h、x) ,然後將它傳遞至 setInstrumentation層次方法。
呼叫 setInstrumentationLevel 作業 - 啟用/停用 PMI 計數器
  • 設定參數("pmi=l" 是將所有模組設為低層次的簡單方法)。
    wsadmin>set params [java::new {java.lang.Object[]} 2] 
    
    wsadmin>$params set 0 [java::new java.lang.String pmi=l] 
    wsadmin>$params set 1 [java::new java.lang.Boolean true]
    
  • 設定簽章。
    wsadmin>set sigs  [java::new {java.lang.String[]} 2] 
    
    wsadmin>$sigs set 0 java.lang.String
    wsadmin>$sigs set 1 java.lang.Boolean
    
  • 呼叫方法。 請使用 invoke_jmx ,因為它有參數。
    wsadmin>$AdminControl invoke_jmx $perfOName setInstrumentationLevel $params $sigs
    
這個指令不傳回任何內容。
附註: PMI 層次字串可以簡式為 pmi=level (其中層次是 n、l、m、h 或 x) ,或類似 module1=level1:module2=level2:module3=level3 的格式與從傳回的字串中顯示的格式相同getInstrumentationLevelString.

呼叫 getStatsString(ObjectName, Boolean) 作業

如果您知道 MBean ObjectName,您可以傳遞正確的參數來呼叫這個方法。 這裡使用的 JVM MBean 便是一個例子。

  • 取得 MBean 查詢字串。 例如,JVM MBean。
    wsadmin>set jvmName [$AdminControl completeObjectName type=JVM,*]
    
  • 設定參數。
    wsadmin>set params [java::new {java.lang.Object[]} 2]
    
    wsadmin>$params set 0 [$AdminControl makeObjectName $jvmName]
    wsadmin>$params set 1 [java::new java.lang.Boolean true]
    
  • 設定簽章。
    wsadmin>set sigs  [java::new {java.lang.String[]} 2]
    wsadmin>$sigs set 0 javax.management.ObjectName 
    wsadmin>$sigs set 1 java.lang.Boolean
    
  • 呼叫方法。
    wsadmin>$AdminControl invoke_jmx $perfOName getStatsString $params $sigs
    
這個指令會傳回下列內容:
{Description jvmRuntimeModule.desc}
 {Descriptor {{Node wenjianpc} {Server server1} {Module jvmRuntimeModule}
 {Name jvmRuntimeModule} {Type MODULE}}} 
{Level 7} 
{Data {{{Id 4} {Descriptor {{Node wenjianpc} {Server server1} {Module jvmRuntimeModule}
 {Name jvmRuntimeModule} {Type DATA}}} 
{PmiDataInfo {{Name jvmRuntimeModule.upTime} {Id 4}
 {Description jvmRuntimeModule.upTime.desc} {Level 1}
 {Comment {The amount of time in seconds the JVM has been running}} 
 {SubmoduleName null} {Type 2} {Unit unit.second} {Resettable false}}} 
{Time 1033670422282} {Value {Count 638} }} 
{{Id 3} {Descriptor {{Node wenjianpc} {Server server1} {Module jvmRuntimeModule}
 {Name jvmRuntimeModule} {Type DATA}}} 
{PmiDataInfo {{Name jvmRuntimeModule.usedMemory} {Id 3}
 {Description jvmRuntimeModule.usedMemory.desc} {Level 1}
 {Comment {Used memory in JVM runtime}} {SubmoduleName null} {Type 2}
 {Unit unit.kbyte} {Resettable false}}} {Time 1033670422282}
 {Value {Count 66239} }} 
{{Id2} {Descriptor {{Node wenjianpc} {Server server1} {Module jvmRuntimeModule}
 {Name jvmRuntimeModule} {Type DATA}}} 
{PmiDataInfo {{Name jvmRuntimeModule.freeMemory} {Id 2}
 {Description jvmRuntimeModule.freeMemory.desc} {Level 1} 
 {Comment {Free memory in JVM runtime}} 
{SubmoduleName null} {Type 2} {Unit unit.kbyte} {Resettable false}}} 
{Time 1033670422282} {Value {Count 34356} }} 
{{Id 1} {Descriptor{{Node wenjianpc} {Server server1} {Module jvmRuntimeModule}
 {Name jvmRuntimeModule} {Type DATA}}} 
{PmiDataInfo {{Name jvmRuntimeModule.totalMemory} {Id 1}
 {Description jvmRuntimeModule.totalMemory.desc} {Level 7}
 {Comment {Total memory in JVM runtime}} 
 {SubmoduleName null} {Type 5} {Unit unit.kbyte} {Resettable false}}} 
{Time 1033670422282} {Value {Current 100596} {LowWaterMark 38140}
 {HighWaterMark 100596} {MBean 38140.0} }}}}

呼叫 getStatsString (ObjectName, String, Boolean) 作業

這項作業採用額外的 String 參數,它用於沒有相符 MBean 的 PMI 模組。 在此情況下,母項 MBean 會與代表 PMI 模組的「字串」名稱搭配使用。 呼叫 listStatMemberNames 可以找到 MBean 中可用的字串名稱。 例如, beanModule 是一個邏輯模組,用來聚集所有 Enterprise JavaBeans上的 PMI 資料,但 beanModule沒有 MBean。 因此,您可以傳遞伺服器 MBean ObjectName 和 (beanModule) 字串,以便在 beanModule 中取得 PMI 資料。

  • 取得 MBean 查詢字串。 例如,伺服器 MBean:
    wsadmin>set mySrvName [$AdminControl completeObjectName 
        type=Server,name=server1,node=wenjianpc,*]
    
  • 設定參數。
    wsadmin>set params [java::new {java.lang.Object[]} 3]
    
    wsadmin>$params set 0 [$AdminControl makeObjectName $mySrvName]
    
    wsadmin>$params set 1 [java::new java.lang.String beanModule]
    wsadmin>$params set 2 [java::new java.lang.Boolean true]
    
  • 設定簽章。
    wsadmin>set sigs  [java::new {java.lang.String[]} 3]
    
    wsadmin>$sigs set 0 javax.management.ObjectName
    
    wsadmin>$sigs set 1 java.lang.String
    wsadmin>$sigs set 2 java.lang.Boolean
    
  • 呼叫方法。
    wsadmin>$AdminControl invoke_jmx $perfOName getStatsString $params $sigs
    
這個指令會傳回 BeanModule 階層內所有 Enterprise JavaBeans 中的 PMI 資料,因為遞迴旗標設為 true。
附註: 這個方法用來取得沒有直接 MBean 對映之 PMI 模組的統計資料。

呼叫 listStatMemberNames 作業

  • 取得 MBean 查詢字串。 例如,伺服器:
    wsadmin>set mySrvName [$AdminControl completeObjectName 
        type=Server,name=server1,node=wenjianpc,*]
    
  • 設定參數。
    wsadmin>set params [java::new {java.lang.Object[]} 1]
    wsadmin>$params set 0 [$AdminControl makeObjectName $mySrvName]
    
  • 設定簽章。
    wsadmin>set sigs  [java::new {java.lang.String[]} 1]
    wsadmin>$sigs set 0 javax.management.ObjectName
    wsadmin>$AdminControlinvoke_jmx $perfOName listStatMemberNames $params $sigs
    
這個指令會傳回 PMI 模組和子模組名稱,沒有直接 MBean 對映。 名稱以空格區隔 " "。 然後,您可以在 getStatsString 方法中使用名稱作為 String 參數。 例如:
beanModule connectionPoolModule j2cModule servletSessionsModule 
threadPoolModule 
webAppModule
利用 wsadmin 工具自訂及執行下列範例 Jython Script,以取得 PMI 資料:
print "\n---------------------------------------------------------------------- "
print "Obtain the Perf MBean ObjectName"
print "------------------------------------------------------------------------ "
perfName = AdminControl.completeObjectName ('type=Perf,*')
perfOName = AdminControl.makeObjectName (perfName)
print perfOName
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke getStatisticSet operation "
print "------------------------------------------------------------------------ "
print AdminControl.invoke (perfName, 'getStatisticSet')
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke setStatisticSet operation"
print "------------------------------------------------------------------------ "
params = ['extended']

sigs  = ['java.lang.String']

print AdminControl.invoke_jmx (perfOName, 'setStatisticSet', params, sigs)
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke getConfig operation"
print "------------------------------------------------------------------------ "
jvmName = AdminControl.completeObjectName ('type=JVM,*')

params = [AdminControl.makeObjectName (jvmName)] 

sigs = ['javax.management.ObjectName']

print AdminControl.invoke_jmx (perfOName, 'getConfig', params, sigs)
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke getCustomSetString operation"
print "------------------------------------------------------------------------ "
print AdminControl.invoke (perfName, 'getCustomSetString')
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke setCustomSetString operation"
print "------------------------------------------------------------------------ "
params = ['jvmRuntimeModule=1,2,3,4', java.lang.Boolean ('false')] 

sigs  = ['java.lang.String', 'java.lang.Boolean']

print AdminControl.invoke_jmx (perfOName, 'setCustomSetString', params, sigs)
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke getStatsObject operation"
print "------------------------------------------------------------------------ "
jvmName = AdminControl.completeObjectName ('type=JVM,*')

params = [AdminControl.makeObjectName (jvmName), java.lang.Boolean ('false')] 

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

print AdminControl.invoke_jmx (perfOName, 'getStatsObject', params, sigs)
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke getInstrumentationLevelString operation"
print "------------------------------------------------------------------------ "
print AdminControl.invoke (perfName, 'getInstrumentationLevelString')
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke setInstrumentationLevel operation - enable/disable PMI counters "
print "------------------------------------------------------------------------ "
params = ['pmi=l', java.lang.Boolean ('true')] 

sigs = ['java.lang.String', 'java.lang.Boolean'] 

print AdminControl.invoke_jmx (perfOName, 'setInstrumentationLevel', params, sigs)
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke getStatsString(ObjectName, Boolean) operation"
print "------------------------------------------------------------------------ "
jvmName = AdminControl.completeObjectName ('type=JVM,*')

params = [AdminControl.makeObjectName (jvmName), java.lang.Boolean ('true')]

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

print AdminControl.invoke_jmx (perfOName, 'getStatsString', params, sigs)
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke getStatsString (ObjectName, String, Boolean) operation"
print "------------------------------------------------------------------------ "
mySrvName = AdminControl.completeObjectName ('type=Server,name=server1,node=wcsNode,*')

params = [AdminControl.makeObjectName (mySrvName),
          'beanModule',
          java.lang.Boolean ('true')]

sigs = ['javax.management.ObjectName',
        'java.lang.String',
        'java.lang.Boolean')

print AdminControl.invoke_jmx (perfOName, 'getStatsString', params, sigs)
print "------------------------------------------------------------------------ \n"


print "\n---------------------------------------------------------------------- "
print "Invoke listStatMemberNames operation"
print "------------------------------------------------------------------------ "
mySrvName = AdminControl.completeObjectName ('type=Server,name=server1,node=wcsNode,*')

params = [AdminControl.makeObjectName (mySrvName)]

sigs = ['javax.management.ObjectName']

print AdminControl.invoke_jmx (perfOName, 'listStatMemberNames', params, sigs)
print "------------------------------------------------------------------------ \n"
附註: 當啟用「智慧型管理」時,應用程式伺服器無法停用「智慧型管理」所需要的 PMI 計數器。 如需啟用「智慧型管理」時無法停用之 PMI 計數器清單的相關資訊,請參閱 啟用 PMI 資料收集