是否可以通过JMX使JBoss中的单个会话无效?

我们正在跟踪应用程序中的一些内存问题,并且我们可以看到问题似乎存在的会话大小。 它只会影响某些会话,它们似乎会失控,并且我们希望能够或多或少地“手动”使这些会话无效以回收该内存。 有没有办法通过JMX做到这一点? 我们正在使用JBoss 4.5.2。

提前致谢。

答案是肯定的,你可以。

– 这会在JBoss中加载Web模块MBean–

/opt/lib/jboss-4.2.3.GA/bin/twiddle.sh -s <--ServerIP-->:1099 query 'jboss.web:*' | grep "type=Manager"

– 一旦你有了,你可以从那个MBean获得活跃的会话 –

/opt/lib/jboss-4.2.3.GA/bin/twiddle.sh -s 172.16.0.216:1099 invoke "<--MBean-->" listSessionIds

– 最后,一旦你有了这个列表,你就可以选出感兴趣的会话并使它过期 –

/opt/lib/jboss-4.2.3.GA/bin/twiddle.sh -s <--ServerIP-->:1099 invoke "<--MBean-->" expireSession <--SessionID-->

您将用服务器绑定的IP替换< - ServerIP - > …它不必是本地的。 只要您有权访问端口1099,就可以远程运行。

< - MBean - >将替换为第一个查询的结果之一。

< - SessionID - >将替换为第二个命令中的一个会话ID。

您还可以将/opt/lib/jboss-4.2.3.GA/bin/twiddle.sh替换为机器上旋转的位置。 它包含在JBoss中。

谢谢Ichorus。 您的解决方案至少帮助我在任何给定时间查看服务器上的所有活动会话。

顺便说一下……在运行twiddle之前需要做以下几件事。确保在环境中设置JAVA_HOME和JBOSS_HOME并确保JBOSS_CLASSPATH未设置或者在twiddle.sh.ie {JBOSS_HOME} \ client中给出了所有的libs \ jbossall-client.jar中; {JBOSS_HOME} \客户\ getopt.jar; {JBOSS_HOME} \客户\ log4j.jar; {JBOSS_HOME} \ lib中\的jboss-jmx.jar

另外,你会遇到ClassNotFoundexception

Sudheer