【问题标题】:Using jython to obtain webcontainer from WebSphere PMI data使用 jython 从 WebSphere PMI 数据中获取 webcontainer
【发布时间】:2013-09-27 13:12:10
【问题描述】:

尝试制作一个非常简单的 jython 脚本来从 websphere 获取基本的 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 线程池(最好只有活动线程......但我可以稍后过滤掉它)

【问题讨论】:

  • 好的,最后我从一位同事那里得到了答案。不知道为什么我决定开始对线程池使用不同的方法......但是回到我的 JVM 方法我最终得到了一个工作脚本:)

标签: performance websphere jython websphere-8


【解决方案1】:

您需要从该 MBean 中检索 stats 属性:

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 的贡献者之一。

【讨论】:

  • 真正有趣的项目!我一定会调查的
【解决方案2】:

答案结果如下(清理后更通用的版本):

#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 的答案,它也有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多