我们正在运行带有 JBoss 的服务器,并使用 log4j 来查找错误。我被要求想出一种方法来记录诸如空闲内存和活动线程组计数之类的东西,这样我们就可以监视这些,而不必通过 jboss 控制台。但是,有人告诉我,如果我能做到这一点而不必对现有服务器进行任何更改,那将是首选。我最初的想法是更改 log4j.xml 以将相关数据保存到数据库中以便稍后解析并显示,但是现在我真的不知道。有没有其他方法,无需安装 3rd 方应用程序,自动从 jboss 服务器获取信息并保存它?还是我应该继续争取被允许修改 log4j xml?另外,这甚至可能吗?我'
问问题
232 次
1 回答
0
猎人;
假设没有网络障碍并且没有以任何方式禁用 JMX 远程处理,您可以使用 JMX API 远程监控这些值。这是执行此操作的一些 Groovy 代码,但您可以轻松地将其转换为 Java。
import javax.management.*;
import javax.naming.*;
Properties p = new Properties();
p.put(Context.PROVIDER_URL, url);
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put("jnp.disableDiscovery", "true");
ctx = new InitialContext(p);
contexts.put(url, ctx);
mbeanServer = ctx.lookup("/jmx/rmi/RMIAdaptor");
// Lookups here
将/client/jbossall-client.jar放在你的类路径中。
现在只需滚动浏览 JMXConsole(如果必须在开发服务器上)并选择要收集的属性和 ObjectName。例如,扩展上面的示例,以获得 FreeMemory(又是 groovy):
import javax.management.*;
def objectName = new ObjectName("jboss.system:type=ServerInfo");
def freeMem = mbeanServer.getAttribute(objectName, "FreeMemory");
在您的 JMXConsole 中,映射到此 MBean:
以及该 MBean 中的此属性:
因此,如果您设置一个调度程序来不时收集这些数据,您可以将其写入数据库、将其放入电子邮件或其他任何方式。
说得通 ?
于 2012-05-18T19:47:58.310 回答