LoadRunner监控Tomcat的几种方法.docx
- 文档编号:4164475
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:16
- 大小:20.33KB
LoadRunner监控Tomcat的几种方法.docx
《LoadRunner监控Tomcat的几种方法.docx》由会员分享,可在线阅读,更多相关《LoadRunner监控Tomcat的几种方法.docx(16页珍藏版)》请在冰豆网上搜索。
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",
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LoadRunner 监控 Tomcat 方法