使用 wsadmin 工具来启用 PMI

通过本页面来了解如何使用命令行(而不是管理控制台)来启用性能监控基础结构。

有关此任务

您可以使用命令行来启用性能监控基础结构 (PMI)。

过程

跑过管理员命令。
使用 wsadmin,您可以调用 Perf Mbean 上的操作,以获取 PMI 数据,设置或获取 PMI 监视级别,以及启用数据计数器。
笔记:如果尚未启用 PMI 数据,您需要先通过调用启用 PMI 数据setInstrumentationLevelPerf MBean 上的操作。

Perf MBean 中下列操作可用于 wsadmin

/** 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 Version 8.5
 */
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 Version 8.5
 */
public String getInstrumentationLevelString();     

/** Return the PMI data in String 
    NOTE: This method is deprecated in Version 8.5
 */     
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 Version 8.5
 */     
public String getStatsString(ObjectName on, String submoduleName, Boolean recursive);

/** Return the submodule names if any for the MBean      
    NOTE: This method is deprecated in Version 8.5
 */
public String listStatMemberNames(ObjectName on);
如果 MBean 是 StatisticProvider,并且如果您将它的 ObjectName 传递给 getStatsObject,那么您将获取该 MBean 的统计数据。 具有下列 MBean 类型的 MBean 是统计提供程序:
  • DynaCache
  • EJB 模块
  • 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 组件中启用了统计标识 1、3、4。 使用先前的 getConfig 操作或使用 API 文档可以找到统计标识的描述。 此输出包含整个服务器的当前监视规范。 各个模块通过 : 分隔,> 用作模块内的分隔符。

调用 setCustomSetString 操作

可以使用此操作选择性地启用或禁用统计信息。 在以下命令中启用 JVM 模块的统计标识 1、2、3、4。 要启用所有的统计标识,请使用星号(*)。

    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 
the Java virtual machine run time., 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 
the Java virtual machine run time., unit=KILOBYTE, type=CountStatistic, 
count=53509

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

    name=UpTime, ID=4, description=The amount of time (in seconds) that 
the Java virtual machine has been running., 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),然后将其传递给setInstrumentationLevel方法。
调用 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 server
1} {Module jvmRuntimeModule} {Name jvmRuntimeModule} {Type 
MODULE}}} {Level 7} {
Data {{{Id 4} {Descriptor {{Node wenjianpc} {Server server1} 
{Module jvmRuntimeM
odule} {Name jvmRuntimeModule} {Type DATA}}} {PmiDataInfo {{Name 
jvmRuntimeModul
e.upTime} {Id 4} {Description jvmRuntimeModule.upTime.desc} {Level 
1} {Comment {
The amount of time in seconds the JVM has been running}} 
{SubmoduleName null} {T
ype 2} {Unit unit.second} {Resettable false}}} {Time 1033670422282} 
{Value {Coun
t 638} }} {{Id 3} {Descriptor {{Node wenjianpc} {Server server1} 
{Module jvmRunt
imeModule} {Name jvmRuntimeModule} {Type DATA}}} {PmiDataInfo 
{{Name jvmRuntimeM
odule.usedMemory} {Id 3} {Description 
jvmRuntimeModule.usedMemory.desc} {Level 1
} {Comment {Used memory in JVM runtime}} {SubmoduleName null} {Type 
2} {Unit uni
t.kbyte} {Resettable false}}} {Time 1033670422282} {Value {Count 
66239} }} {{Id
2} {Descriptor {{Node wenjianpc} {Server server1} {Module 
jvmRuntimeModule} {Nam
e jvmRuntimeModule} {Type DATA}}} {PmiDataInfo {{Name 
jvmRuntimeModule.freeMemor
y} {Id 2} {Description jvmRuntimeModule.freeMemory.desc} {Level 1} 
{Comment {Fre
e memory in JVM runtime}} {SubmoduleName null} {Type 2} {Unit 
unit.kbyte} {Reset
table false}}} {Time 1033670422282} {Value {Count 34356} }} {{Id 1} 
{Descriptor
{{Node wenjianpc} {Server server1} {Module jvmRuntimeModule} {Name 
jvmRuntimeMod
ule} {Type DATA}}} {PmiDataInfo {{Name 
jvmRuntimeModule.totalMemory} {Id 1} {Des
cription 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} {HighWaterM
ark 100596} {MBean 38140.0} }}}}

调用 getStatsString (ObjectName, String, Boolean) 操作

此操作使用另一个字符串参数,并且用于没有匹配 MBean 的 PMI 模块。 在这种情况下,父代 MBean 与 代表 PMI 模块的字符串名协同使用。 通过调用 listStatMemberNames 可以找到 MBean 中可用的字符串名。 例如,beanModule是一个逻辑模块,汇总所有企业的 PMI 数据JavaBeans,但没有 MBeanbeanModule。 因此,您可传递服务器 MBean ObjectName 和字符串 (beanModule),以便在 beanModule 中获取 PMI 数据。

  • 获取 MBean 查询字符串。 例如,server 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
此命令返回所有企业中的 PMI 数据JavaBeans在BeanModule层次结构,因为递归标志设置为 true。
笔记:此方法用于获取没有直接 MBean 映射的 PMI 模块的统计数据。

调用 listStatMemberNames 操作

  • 获取 MBean 查询字符串。 例如,Server。
    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方法。 例如:
beanModule connectionPoolModule j2cModule servletSessionsModule 
threadPoolModule 
webAppModule
使用 wsadmin 工具定制并运行以下示例 Jython 脚本以获取 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 数据收集