2013-09-27 25 views
0

試圖製作一個非常簡單的jython腳本來從websphere獲取基本的PMI數據。獲得JVM的數據,如自由堆等是簡單的(作品)使用jython從WebSphere PMI數據獲取webcontainer

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) 

但後來我嘗試做了Web容器線程池類似的東西,它失敗

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中

任何想法?我特別只想Web容器線程池(最好是隻有活動的線程...但後來我可以篩選出)

+0

OK我得到了答案,從一個同事到最後。不知道爲什麼我決定開始使用不同的線程池方法...但返回到我的JVM方法我結束了一個工作腳本:) – Seer

回答

0

答案原來是如下(清理和更寬泛的版本):

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

但我也測試了@馬丁Plonkas答案,它也能工作

1

您需要檢索該MBean屬性stats

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

功能相同,但是這個時候使用寬動態庫(http://wdr.github.io/WDR/

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

自白:我WDR貢獻者之一。

+0

真正有趣的項目!我一定會考慮的 – Seer