今天要做一个tomcat监视,参考了ens和华中电力的相关代码,发现他们的做法都是先取到html代码,然后从这html代码中提取自己想要的数据,这太麻烦了,我在想有没有更好的办法。
研究了tomcat的源码后,终于有了发现。我要的数据可以通过以下代码得到:
--------server information------------------
服务器信息:ServerInfo.getServerInfo()
jvm版本:System.getProperty("java.runtime.version")
jvm vendor:System.getProperty("java.vm.vendor")
操作系统:System.getProperty("os.name")
操作系统版本:System.getProperty("os.version")
--------jvm information------------------
free_memory:Runtime.getRuntime().freeMemory()
total_memory:Runtime.getRuntime().totalMemory()
max_memory:Runtime.getRuntime().maxMemory()
---------应用列表-------------------
private Element createApplications()
{
Element applications = null;
try
{
applications = new Element("applications");
MBeanServer mBeanServer = Registry.getServer();
ObjectName queryHosts = new ObjectName("*:j2eeType=WebModule,*");
Set hostsON = mBeanServer.queryNames(queryHosts, null);
Iterator iterator = hostsON.iterator();
while(iterator.hasNext())
{
ObjectName contextON = (ObjectName)iterator.next();
String webModuleName = contextON.getKeyProperty("name");
String hostName = null;
String contextName = null;
if(webModuleName.startsWith("//"))
webModuleName = webModuleName.substring(2);
int slash = webModuleName.indexOf("/");
if(slash != -1)
{
hostName = webModuleName.substring(0, slash);
contextName = webModuleName.substring(slash);
}
else continue;
if("/".equals(contextName)) continue;
Element oneApp = new Element("application_information");
try
{
ObjectName queryManager = new ObjectName(contextON.getDomain() + ":type=Manager,path=" + contextName + ",host=" + hostName + ",*");
Set managersON = mBeanServer.queryNames(queryManager, null);
ObjectName managerON = null;
for(Iterator iterator2 = managersON.iterator(); iterator2.hasNext();)
managerON = (ObjectName)iterator2.next();
Element wmn = new Element("web_module_name");
wmn.setText(contextName.substring(1));
Element as = new Element("active_sessions");
as.setText(mBeanServer.getAttribute(managerON, "activeSessions").toString());
Element sc = new Element("session_count");
sc.setText(mBeanServer.getAttribute(managerON, "sessionCounter").toString());
Element mas = new Element("max_active_sessions");
mas.setText(mBeanServer.getAttribute(managerON, "maxActive").toString());
oneApp.addContent(wmn);
oneApp.addContent(as);
oneApp.addContent(sc);
oneApp.addContent(mas);
applications.addContent(oneApp);
}
catch(Exception e)
{
System.out.println("Error in TomcatMonitor.createApplications()-2");
}//end_try
}//end_while
}
catch(Exception e)
{
System.out.println("Error in TomcatMonitor.createApplications()-1");
}//end_try
return applications;
}