LoadRunner监控Tomcat的几种方法.docx

上传人:b****5 文档编号:4164475 上传时间:2022-11-28 格式:DOCX 页数:16 大小:20.33KB
下载 相关 举报
LoadRunner监控Tomcat的几种方法.docx_第1页
第1页 / 共16页
LoadRunner监控Tomcat的几种方法.docx_第2页
第2页 / 共16页
LoadRunner监控Tomcat的几种方法.docx_第3页
第3页 / 共16页
LoadRunner监控Tomcat的几种方法.docx_第4页
第4页 / 共16页
LoadRunner监控Tomcat的几种方法.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

LoadRunner监控Tomcat的几种方法.docx

《LoadRunner监控Tomcat的几种方法.docx》由会员分享,可在线阅读,更多相关《LoadRunner监控Tomcat的几种方法.docx(16页珍藏版)》请在冰豆网上搜索。

LoadRunner监控Tomcat的几种方法.docx

LoadRunner监控Tomcat的几种方法

通过JConsole监控Tomcat

  1、打开tomcat5的bin目录中的catalina.bat文件,在头部注释部分的后面加上:

  setJAVA_OPTS=%JAVA_OPTS%-Dcom.sun.management.jmxremote.port=8999-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false

  2、修改JMX远程访问授权。

  进入JAVA安装目录的\jre6\lib\management目录,把jmxremote.password.template文件改名为jmxremote.password,去掉最后两行的注释(用户名和密码):

  monitorRole  QED

  controlRole   R&D

  确保jmxremote.access文件末尾的访问角色没有被注释掉:

  monitorRole   readonly

  controlRole   readwrite\

  createjavax.management.monitor.*,javax.management.timer.*\

  unregister

  然后分别选择这两个文件,点右键“属性”-〉安全,点“高级”,去掉“从父项继承....”,弹出窗口中选“删除”,这样删除了所有访问权限。

再选“添加”-〉高级,“立即查找”,选中你的用户,例administrator,点“确定",“确定"。

来到权限窗口,勾选"完全控制",点"确定"

  注:

JDK好像需要装在NTFS文件系统下才行

  3、启动Tomcat

  4、在命令行输入netstat-an查看端口8999是否已经打开,如果没有,则是前面的配置没配好。

  5、如果已经配置好,则在命令行输入jconsole,打开jdk自带的JMX客户端,选择远程连接,录入tomcat所在机器的IP,端口例192.168.1.100:

8999,帐号、密码在jmxremote.password中,如帐号controlRole,密码R&D(缺省monitorRole只能读,controlRole能读写,jmxremote.access中可配置)。

点“连接”。

编写JAVA程序收集Tomcat性能数据

importjava.lang.management.MemoryUsage;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importjava.util.Formatter;

importjava.util.HashMap;

importjava.util.Iterator;

importjava.util.Map;

importjava.util.Set;

 

importjavax.management.MBeanAttributeInfo;

importjavax.management.MBeanInfo;

importjavax.management.MBeanServerConnection;

importjavax.management.ObjectInstance;

importjavax.management.ObjectName;

importjavax.management.openmbean.CompositeDataSupport;

importjavax.management.remote.JMXConnector;

importjavax.management.remote.JMXConnectorFactory;

importjavax.management.remote.JMXServiceURL;

 

publicclassMonitorTomcat{ 

 

   

    publicstaticvoidmain(String[]args){ 

        try{ 

 

           StringjmxURL="service:

jmx:

rmi:

///jndi/rmi:

//192.168.1.100:

8999/jmxrmi";//tomcatjmxurl 

           JMXServiceURLserviceURL=newJMXServiceURL(jmxURL); 

            

           Mapmap=newHashMap(); 

           String[]credentials=newString[]{"monitorRole","QED"}; 

           map.put("jmx.remote.credentials",credentials);  

           JMXConnectorconnector=JMXConnectorFactory.connect(serviceURL,map); 

           MBeanServerConnection  mbsc=connector.getMBeanServerConnection(); 

            

           //端口最好是动态取得 

           ObjectNamethreadObjName=newObjectName("Catalina:

type=ThreadPool,name=http-8080"); 

           MBeanInfombInfo=mbsc.getMBeanInfo(threadObjName); 

            

           StringattrName="currentThreadCount";//tomcat的线程数对应的属性值 

           MBeanAttributeInfo[]mbAttributes=mbInfo.getAttributes(); 

           System.out.println("currentThreadCount:

"+mbsc.getAttribute(threadObjName,attrName)); 

            

           //heap 

           for(intj=0;j

               System.out.println("###########"+mbsc.getDomains()[j]);  

           }  

           SetMBeanset=mbsc.queryMBeans(null,null); 

           System.out.println("MBeanset.size():

"+MBeanset.size()); 

           IteratorMBeansetIterator=MBeanset.iterator(); 

           while(MBeansetIterator.hasNext()){  

               ObjectInstanceobjectInstance=(ObjectInstance)MBeansetIterator.next(); 

               ObjectNameobjectName=objectInstance.getObjectName(); 

               StringcanonicalName=objectName.getCanonicalName(); 

               System.out.println("canonicalName:

"+canonicalName);  

               if(canonicalName.equals("Catalina:

host=localhost,type=Cluster"))      {   

                   //GetdetailsofclusterMBeans 

                   System.out.println("ClusterMBeansDetails:

"); 

                   System.out.println("=========================================");  

                   //getMBeansDetails(canonicalName); 

                  StringcanonicalKeyPropList=objectName.getCanonicalKeyPropertyListString(); 

              } 

           } 

           //-------------------------system---------------------- 

           ObjectNameruntimeObjName=newObjectName("java.lang:

type=Runtime"); 

           System.out.println("厂商:

"+(String)mbsc.getAttribute(runtimeObjName,"VmVendor")); 

           System.out.println("程序:

"+(String)mbsc.getAttribute(runtimeObjName,"VmName")); 

           System.out.println("版本:

"+(String)mbsc.getAttribute(runtimeObjName,"VmVersion")); 

           Datestarttime=newDate((Long)mbsc.getAttribute(runtimeObjName,"StartTime")); 

           SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss"); 

           System.out.println("启动时间:

"+df.format(starttime)); 

            

           Longtimespan=(Long)mbsc.getAttribute(runtimeObjName,"Uptime"); 

           System.out.println("连续工作时间:

"+MonitorTomcat.formatTimeSpan(timespan)); 

           //------------------------JVM------------------------- 

           //堆使用率 

           ObjectNameheapObjName=newObjectName("java.lang:

type=Memory"); 

           MemoryUsageheapMemoryUsage= MemoryUsage.from((CompositeDataSupport)mbsc.getAttribute(heapObjName,"HeapMemoryUsage")); 

           longmaxMemory=heapMemoryUsage.getMax();//堆最大 

           longcommitMemory=heapMemoryUsage.getCommitted();//堆当前分配 

           longusedMemory=heapMemoryUsage.getUsed(); 

           System.out.println("heap:

"+(double)usedMemory*100/commitMemory+"%");//堆使用率 

            

           MemoryUsagenonheapMemoryUsage= MemoryUsage.from((CompositeDataSupport)mbsc.getAttribute(heapObjName,"NonHeapMemoryUsage"));            

           longnoncommitMemory=nonheapMemoryUsage.getCommitted(); 

           longnonusedMemory=heapMemoryUsage.getUsed(); 

           System.out.println("nonheap:

"+(double)nonusedMemory*100/noncommitMemory+"%"); 

            

           ObjectNamepermObjName=newObjectName("java.lang:

type=MemoryPool,name=PermGen"); 

           MemoryUsagepermGenUsage= MemoryUsage.from((CompositeDataSupport)mbsc.getAttribute(permObjName,"Usage"));            

           longcommitted=permGenUsage.getCommitted();//持久堆大小 

           longused=heapMemoryUsage.getUsed();// 

           System.out.println("permgen:

"+(double)used*100/committed+"%");//持久堆使用率 

            

           //--------------------Session---------------  

           ObjectNamemanagerObjName=newObjectName("Catalina:

type=Manager,*"); 

           Sets=mbsc.queryNames(managerObjName,null); 

           for(ObjectNameobj:

s){ 

               System.out.println("应用名:

"+obj.getKeyProperty("path")); 

               ObjectNameobjname=newObjectName(obj.getCanonicalName()); 

               System.out.println("最大会话数:

"+mbsc.getAttribute(objname,"maxActiveSessions")); 

               System.out.println("会话数:

"+mbsc.getAttribute(objname,"activeSessions")); 

               System.out.println("活动会话数:

"+mbsc.getAttribute(objname,"sessionCounter")); 

           } 

            

           //-----------------ThreadPool---------------- 

           ObjectNamethreadpoolObjName=newObjectName("Catalina:

type=ThreadPool,*"); 

           Sets2=mbsc.queryNames(threadpoolObjName,null); 

           for(ObjectNameobj:

s2){ 

               System.out.println("端口名:

"+obj.getKeyProperty("name")); 

               ObjectNameobjname=newObjectName(obj.getCanonicalName()); 

               System.out.println("最大线程数:

"+mbsc.getAttribute(objname,"maxThreads")); 

               System.out.println("当前线程数:

"+mbsc.getAttribute(objname,"currentThreadCount")); 

               System.out.println("繁忙线程数:

"+mbsc.getAttribute(objname,"currentThreadsBusy")); 

           } 

                

        }catch(Exceptione){ 

            e.printStackTrace(); 

        } 

    } 

 

    publicstaticStringformatTimeSpan(longspan){ 

        longminseconds=span%1000; 

         

        span=span/1000; 

        longseconds=span%60; 

         

        span=span/60; 

        longmins=span%60; 

         

        span=span/60; 

        longhours=span%24; 

 

        span=span/24; 

        longdays=span; 

        return(newFormatter()).format("%1$d天%2$02d:

%3$02d:

%4$02d.%5$03d",days,hours,mins,seconds,minseconds).toString(); 

    } 

}

记录的数据:

  currentThreadCount:

150

  ###########JMImplementation

  ###########Users

  ###########com.sun.management

  ###########Catalina

  ###########java.lang

  ###########java.util.logging

  MBeanset.size():

383

  canonicalName:

Catalina:

name=HttpRequest152,type=RequestProcessor,worker=http-8080

  canonicalName:

Catalina:

J2EEApplication=none,J2EEServer=none,WebModule=//localhost/jsp-examples,j2eeType=Servlet,name=org.apache.jsp.jsp2.el.basic_002dcomparisons_jsp

  ……

  canonicalName:

Catalina:

port=8009,type=Mapper

  canonicalName:

Catalina:

J2EEApplication=none,J2EEServer=none,WebModule=//localhost/jsp-examples,j2eeType=Servlet,name=org.apache.jsp.dates.date_jsp

  厂商:

SunMicrosystemsInc.

  程序:

JavaHotSpot(TM)ClientVM

  版本:

11.3-b02

  启动时间:

2010-02-0911:

36:

59

  连续工作时间:

0天00:

13:

55.775

  heap:

62.221410820735%

  nonheap:

84.59782727899399%

  permgen:

210.93058268229166%

  应用名:

/jsp-examples

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  应用名:

/

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  应用名:

/host-manager

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  应用名:

/tomcat-docs

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  应用名:

/AltoroJ

  最大会话数:

-1

  会话数:

301

  活动会话数:

301

  应用名:

/webdav

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  应用名:

/servlets-examples

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  应用名:

/manager

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  应用名:

/balancer

  最大会话数:

-1

  会话数:

0

  活动会话数:

0

  端口名:

http-8080

  最大线程数:

150

  当前线程数:

150

  繁忙线程数:

100

  端口名:

jk-8009

  最大线程数:

200

  当前线程数:

4

  繁忙线程数:

1

使用LR的lr_user_data_point函数

 

",

              "Ord=1",

              LAST);

 

       web_reg_save_param("ServerJVMVersion",

              "LB=",

              "Ord=2",

              LAST);

 

       web_reg_save_param("ServerJVMVendor",

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1