Использование jython для получения веб-контейнера из данных WebSphere PMI

Попытка сделать действительно простой скрипт jython для получения основных данных PMI из веб-сферы. Получение данных JVM, таких как свободная куча и т. д., просто (и работает)

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)

Но затем я пытаюсь сделать что-то подобное для пула потоков WebContainer, и это не удается.

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)

Ошибка

WASX7015E: Исключение при выполнении команды: "AdminControl.invoke_jmx (threadPoolOName, 'getStatsObject', params, sigs)"; информация об исключении: javax.management.MBeanException javax.management.ServiceNotFoundException: операция getStatsObject отсутствует в ModelMBeanInfo

Любые идеи? Я специально хочу ТОЛЬКО пул потоков WebContainer (и желательно только активные потоки... но я могу отфильтровать это позже)


person Seer    schedule 27.09.2013    source источник
comment
Хорошо, в конце концов я получил ответ от коллеги. Не уверен, почему я решил начать использовать другой метод для пула потоков... но, вернувшись к моему методу для JVM, я получил рабочий скрипт :)   -  person Seer    schedule 01.10.2013


Ответы (2)


Вам нужно получить атрибут stats из этого MBean:

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

Та же функциональность, но на этот раз с использованием библиотеки WDR (http://wdr.github.io/WDR/)

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

Признание: я один из участников WDR.

person Marcin Płonka    schedule 30.09.2013
comment
Действительно интересный проект! я обязательно посмотрю - person Seer; 01.10.2013

Ответ оказывается следующим (очищенная и более общая версия):

#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)

Но я также проверил ответ @Martin Plonkas, и он тоже работает

person Seer    schedule 01.10.2013