??????? 今天要做一個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("http://"))
?????????????? 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;
?}