0
votes

Trying to make a really simple jython script to obtain basic PMI data from websphere. Obtaining JVM data such as free heap etc is simple (and works)

perfName = AdminControl.completeObjectName ('type=Perf,process=PTEIRMW_APPSERVER801,*')
perfOName = AdminControl.makeObjectName (perfName)
jvmName = AdminControl.completeObjectName ('type=JVM,process=PTEIRMW_APPSERVER801,*')
params = [AdminControl.makeObjectName (jvmName), java.lang.Boolean ('false')]
sigs = ['javax.management.ObjectName', 'java.lang.Boolean']
AdminControl.invoke_jmx (perfOName, 'getStatsObject', params, sigs)

But then I try and do something similar for the WebContainer threadpool and it fails

threadPoolName = AdminControl.completeObjectName('name=WebContainer,type=ThreadPool,process=PTEIRMW_APPSERVER801,*')
threadPoolOName = AdminControl.makeObjectName (threadPoolName)
params = [AdminControl.makeObjectName (threadPoolName), java.lang.Boolean ('false')]
sigs = ['javax.management.ObjectName', 'java.lang.Boolean']
AdminControl.invoke_jmx (threadPoolOName, 'getStatsObject', params, sigs)

The error is

WASX7015E: Exception running command: "AdminControl.invoke_jmx (threadPoolOName, 'getStatsObject', params, sigs)"; exception information: javax.management.MBeanException javax.management.ServiceNotFoundException: Operation getStatsObject not in ModelMBeanInfo

Any ideas? I specifically ONLY want the WebContainer threadpool (and preferably only active threads... but I can filter that out later)

2
OK I got the answer from a colleague in the end. Not sure why I decided to start using a different method for threadpool... but returning to my method for JVM I ended up with a working script :) - Seer

2 Answers

1
votes

You need to retrieve stats attribute from that MBean:

on = AdminControl.queryNames('*,name=WebContainer,type=ThreadPool,process=PTEIRMW_APPSERVER801')
print AdminControl.getAttribute_jmx(AdminControl.makeObjectName(on), 'stats')

Same functionality, this time using WDR library (http://wdr.github.io/WDR/)

print getJMXMBean1(type='ThreadPool', name='WebContainer', process='PTEIRMW_APPSERVER801').stats

Confession: I'm one of WDR contributors.

0
votes

The answer turns out to be as follows (cleaned up and more generic version):

#Get the AppServer from parameter
appServer = sys.argv[0]

perfName = AdminControl.completeObjectName ('type=Perf,process='+appServer+',*')
perfOName = AdminControl.makeObjectName (perfName)
sigs = ['javax.management.ObjectName', 'java.lang.Boolean']

# Getting the JVM Data
jvmName = AdminControl.completeObjectName ('type=JVM,process='+appServer+',*')
params = [AdminControl.makeObjectName (jvmName), java.lang.Boolean ('false')]
print AdminControl.invoke_jmx (perfOName, 'getStatsObject', params, sigs)

# Getting the threadpool data

threadPoolName = AdminControl.completeObjectName('name=WebContainer,type=ThreadPool,process='+appServer+',*')
params = [AdminControl.makeObjectName (threadPoolName), java.lang.Boolean ('false')]
print AdminControl.invoke_jmx (perfOName, 'getStatsObject', params, sigs)

But I also tested out @Martin Plonkas answer and it works too