WLST检查PermGen用法

时间:2014-03-03 20:22:57

标签: weblogic jython permgen wlst

我想使用WLST获取WL域中服务器的Max Perm Gen和Usage。 到目前为止,我能够看到从JMX获取信息,mBean。 mBean位置是“java.lang:Location = Server1,name = PS Perm Gen,type = MemoryPool”

我尝试了下面的代码,但似乎没有用。

testObject=ObjectName('java.lang:Location=Server1,name=PS Perm Gen,type=MemoryPool')

或尝试下面的代码也不起作用。

testBean=getMBean('javax.management.openmbean.CompositeData:Location=Server1,name=Usage,type=PS Perm Gen')
for item in testBean:
    print item.getKey() + ':' + item.getValue()

请帮忙。

更新:--------------------------------------------- ---- 感谢您的快速答复。还没有与我的主题相关的WLST代码,因为我正在尝试探索搜索的可能性。

基本上,我正在尝试在将一个人工制品部署到WL托管服务器之前检查WLST运行中的可用Perm Gen大小。

这是因为WebLogic没有从WL托管服务器中释放未部署的artefact的非堆内存空间,如果您继续进行部署/取消部署而不进行回收,则WL托管服务器最终会抛出Om的Perm Gen空间。

我们正在尽量减少服务中断,并尽可能长时间地保持WL托管服务器的运行。 我已经搜索了WLST mBean树位置的所有地方以获取非堆内存状态但是失败了。

但是如果你使用JManage,你可以通过mBean对象获取非堆内存状态“java.lang:Location = Server1,name = PS Perm Gen,type = MemoryPool”。

它将在JManage中显示如下:

Object Name java.lang:Location=Server1,name=PS Perm Gen,type=MemoryPool

Class Name sun.management.MemoryPoolImpl 
Description Information on the management interface of the MBean 
Configured Name       Add to Application  

所以我想知道为什么如果mBean在那里,从WLST中提取mBean信息是不可能的?因此,我正在努力寻求有类似经历/情况的人的帮助。

2 个答案:

答案 0 :(得分:1)

我发现您可以连接到托管服务器,然后使用以下内容:

permObjectName=ObjectName('java.lang:type=MemoryPool,name=PS Perm Gen')
usoPerm=mbs.getAttribute(permObjectName,'Usage')
usoPerm.get('max') #Returns MaxPermSize in bytes
usoPerm.get('used') #Returns used Perm Space in bytes

但是,我已经在多个服务器上对此进行了测试,并且它并不总是有效,因为MBeanServer(mbs)无法看到' " java.lang" mbean tree。

答案 1 :(得分:0)

Weblogic具有不同用途的mbean层次结构。它将所有非weblogic mbeans视为" custom",因此它们位于" custom"树。 https://docs.oracle.com/cd/E24329_01/web.1211/e24415/understandwls.htm#JMXCU239

要获得您所连接的机器的permgen使用情况:

cd('custom:/java.lang/java.lang:type=MemoryPool,name=PS Perm Gen')
permgen=get("Usage").get("used")

如果您已连接到域管理员并希望获取其他服务器的信息:

cd('domainCustom:/java.lang/java.lang:Location='+servername+',name=PS Perm Gen,type=MemoryPool')
permgen=get("Usage").get("used")