loadrunner监控tomcat

合集下载

loadrunner 详细解释

loadrunner 详细解释

LoadRunner2010-10-29 10:24事务TRANSACTION所谓事务(TRANSACTION),就是在脚本定义中定义的某段操作(ACTION),更确切的说,就是一段脚本语句.定义事务时,首先在脚本中找到事务的开始和结束位置,然后分别插入一个事务起始标记,这样,当脚本运行的时候,LOADRUNER会自动在事务的起始点计时,脚本在运行到事务结束点时计时结束,系统会自动记录这段操作的运行时间等性能数据;在脚本运行完毕后,系统会在结果信息中单独反映每个事务运行结果.LR_START_TRANSACTION(“事务名称”)LR_END_TRANSACTION(“事务名称“)集合点RENDEZVOUS多用户同时加载并发,并发过程仅仅体现在开始执行的那一刹那,随着服务器对请求的响应时间的不一致或系统环境条件的限制,在运行过程中能集合到一点的可能性微乎其微,所以将一定数量的用户同时加载并不是真正意义上的并发.系统压力最大的情况是:所有用户都集中到系统瓶颈的某个点上进行操作,从脚本的角度来讲,这个点就是执行脚本的某一条或一段语句,为了真实模拟这个最坏的情况,查看系统在最坏情况下的反映,LOADRUNNER 提供了集合点的功能,帮助测试人员实现真正意义上的并发.LR_RENDEZVOUS(“集合点名称”)参数化PARAMETERS让所有用户都使用相同的数据来运行,对系统造成的压力与实际情况会有所不同.而对于那些禁止一个用户多次登陆的系统,也就严重到无法测试的地步了.为了解决这个问题,让系统更加真实的模拟多用户使用的实际环境,LOADRUNNER提供了对脚本进行参数化输入的功能.所谓的脚本参数化,就是针对脚本中的某些常量,定义一个或多个包含数据源的参数来取代,让场景中不同的虚拟用户在执行相同的脚本时,分别使用参数数据源中的不同数据代替这些常量,从而达到模拟多用户真实使用系统的目的.注:参数化输入只能用于函数中的参数,不能用参数代替非函数中的常量参数.检查点CHECKPOINTLOADRUNNER检查点的功能主要用来验证某个界面上是否存在指定的TEXT或IMAGE等对象,在使用LOADRUNNER测试WEB应用时,可以检查压力较大时WEB服务器能否返回正常的页面。

loadrunner如何监控oracle数据库图文详解

loadrunner如何监控oracle数据库图文详解

loadrunner如何监控oracle数据库图⽂详解在loadrunner场景中监控oracle数据库1.安装oracle客户端。

2.1)这⾥先说明⼀个简单的⽅法从你的oracle中找到notwork/admin/tnsnames.ora这个⽂件,在⽂件最底端添加类似于如下图所⽰的内容,就可以直接监控数据库了。

如把该⽂件配置好以后,步骤2)可直接跳过2)配置oracle的NetConfigurationAssistant进⼊NetConfigurationAssistant页⾯选择“本地Net服务名配置”下⼀步选择“添加—服务器名”下⼀步这⾥选择“TCP”下⼀步这⾥主机名输⼊你所要监控的机器的IP,下⼀步这⾥选择“是,进⾏测试”下⼀步。

进⼊下⼀页⾯后,这⾥提⽰测试未成功,并不是真正的未成功,⽽是需要点击“更改登录”输⼊正确的⽤户名和⼝令,再进⾏测试点击更改登录,输⼊正确的⽤户名密码(这⾥最好要填写最⾼权限的管理员的⽤户名和⼝令),测试成功后进⼊下⼀步。

这⾥就使⽤默认的就可以,记住这个服务名。

下⼀步需要配置另⼀个就选是,不需要选否。

从开始中找到oracle的SQLPlus,验证⼀下你配置的NetConfigurationAssistant是否可以成功连接。

成功后打开loadrunner的control1)这⾥打开oracle也有个简单的⽅法2)选择监控器—联机图—打开新图如1)可以打开,则跳过2)从打开新图中选择“数据库服务器资源图—Oracle”,点击打开图3)打开后选择“监控器—添加度量”点击添加,输⼊所要监控的服务器的IP以及系统环境添加成功后,选择下⾯的添加,输⼊数据库的⽤户名和密码以及服务器名(这⾥的登录名和服务器名需要⽤最⾼权限的oracle数据库帐号密码)输⼊后,需要添加想监控的oracle度量以下为常⽤的⼏个度量值。

Logonscurrent:当前的登陆总数。

Openofreplacedfiles:需要重新打开的⽂件总数。

简述loadrunner的组成部分及其作用

简述loadrunner的组成部分及其作用

简述loadrunner的组成部分及其作用LoadRunner是一款性能测试工具,用于模拟和评估软件系统在不同负载条件下的性能和稳定性。

它由以下几个组成部分组成,每个部分都承担着不同的作用:Virtual User Generator (VUGen):VUGen用于创建脚本,它是LoadRunner中的录制和脚本编辑工具。

使用VUGen,测试人员可以录制用户在应用程序上执行的操作,并根据需要编辑和修改脚本。

VUGen支持多种脚本语言,如C语言、VBScript和JavaScript。

Controller:Controller是负责测试场景设计和执行的组件。

在Controller中,测试人员可以配置并组合虚拟用户脚本,模拟实际用户的行为。

Controller还提供了对负载生成器的管理和监控功能,用于控制虚拟用户的并发数量和负载情况。

Load Generator:Load Generator是用于模拟虚拟用户负载的组件。

它可以在不同的物理或虚拟机上运行,通过并发模拟多个用户对被测应用程序进行压力测试。

多个Load Generator可以协同工作,以模拟大量用户同时访问系统。

Analysis:Analysis用于测试结果的收集、分析和报告。

它提供了各种图表、图像和统计数据,帮助测试人员分析系统的性能和瓶颈,并生成详细的测试报告。

Analysis还支持导出测试结果以供进一步处理和共享。

Additional Components:除了上述核心组件外,LoadRunner还包含其他辅助组件,如VuGen Script Debugger用于调试脚本、Transaction Generator用于创建和管理事务、SiteScope 用于监控应用程序的服务器资源等。

LoadRunner的组成部分共同协作,提供了录制、编辑脚本、设计测试场景、模拟用户负载、执行测试、收集结果和分析数据的功能。

这些组件使测试人员能够模拟真实环境中的用户行为,并对系统的性能和可靠性进行全面评估。

用LoadRunner怎么监控Linux主机信息

用LoadRunner怎么监控Linux主机信息

一、监控Linux1、准备工作可以通过两种方法验证服务器上是否配置了rstatd守护程序:① 使用rup命令,它用于报告计算机的各种统计信息,其中就包括rstatd 的配置信息。

使用命令rup 10.130.61.203,此处10.130.61.203是要监视的linux/Unix服务器的Ip,如果该命令返回相关的统计信息。

则表示已经配置并且激活了rstatd守护进程;若未返回有意义的统计信息,或者出现一条错误报告,则表示rstatd守护进程尚未被配置或有问题。

② 使用find命令#find / -name rpc.rstatd,该命令用于查找系统中是否存在rpc.rstatd文件,如果没有,说明系统没有安装rstatd守护程序。

如果服务器上没有安装rstatd程序(一般来说LINUX都没有安装),需要下载一个包才有这个服务,包名字是rpc.rstatd-4.0.1.tar.gz. 这是一个源码,需要编译,下载并安装rstatd(可以在/projects/rstatd这个地址下载)下载后,开始安装,安装步骤如下:tar -xzvf rpc.rstatd-4.0.1.tar.gzcd rpc.rstatd-4.0.1/./configure —配置操作make —进行编译make install —开始安装./rpc.rstatd —启动rstatd进程【注】检查是否启动rstatd,输入命令:rpcinfo–p。

如果能看到:程序版本协议端口100000 2 tcp 111 portmapper100000 2 udp 111 portmapper100024 1 udp 32768 status100024 1 tcp 32768 status391002 2 tcp 32769 sgi_fam100001 5 udp 806 rstatd100001 3 udp 806 rstatd100001 2 udp 806 rstatd100001 1 udp 806 rstatd那就说明rstatd服务启动了2、安装完成后配置rstatd 目标守护进程xinetd,它的主配置文件是/etc/xinetd.conf ,它里面内容是一些如下的基本信息:## xinetd.conf## Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.#defaults{log_type = FILE /var/log/xinetd.loglog_on_success = HOST EXIT DURATIONlog_on_failure = HOST ATTEMPT# only_from = localhostinstances = 30cps = 50 10## The specification of an interface is interesting, if we are on a firewall.# For example, if you only want to provide services from an internal# network interface, you may specify your internal interfaces IP-Address.## interface = 127.0.0.1}includedir /etc/xinetd.d我们这里需要修改的是/etc/xinetd.d/下的三个conf文件 rlogin ,rsh,rexec 这三个配置文件,打这三个文件里的disable = yes都改成 disable = no( disabled 用在默认的 {} 中禁止服务)或是把# default: off都设置成 on 这个的意思就是在xinetd启动的时候默认都启动上面的三个服务!说明:我自己在配置时,没有disable = yes这项,我就将# default: off 改为:default: on,重启后(cd /etc/init.d/ ./xinetd restart)通过netstat -an |grep 514查看,没有返回。

[VIP专享]loadrunner监控常用性能指标

[VIP专享]loadrunner监控常用性能指标

一、windows常见计数器Memory:Available Mbytes:可用物理内存数. 如果Available Mbytes的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。

page/sec: 表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。

一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。

有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量)。

Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。

page read/sec:页的硬故障,page/sec的子集,为了解析对内存的引用,必须读取页文件的次数。

阈值为>5. 越低越好。

大数值表示磁盘读而不是缓存读。

由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。

因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:Physical Disk\ % Disk TimePhysical Disk\ Avg.Disk Queue Length例如,包括Page Reads/sec 和% Disk Time 及Avg.Disk Queue Length。

如果页面读取操作速率很低,同时% Disk Time 和Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。

但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

要确定过多的页交换对磁盘活动的影响,请将Physical Disk\ Avg.Disk sec/Transfer 和Memory\ Pages/sec 计数器的值增大数倍。

如果这些计数器的计数结果超过了0.1,那么页交换将花费百分之十以上的磁盘访问时间。

如果长时间发生这种情况,那么您可能需要更多的内存。

使用LoadRunner进行性能自动化测试的方法和技巧

使用LoadRunner进行性能自动化测试的方法和技巧

使用LoadRunner进行性能自动化测试的方法和技巧LoadRunner是一款常用的性能测试工具,它可以模拟多种负载条件下的应用程序行为,帮助开发人员检测和解决性能问题。

本文将介绍使用LoadRunner进行性能自动化测试的方法和技巧,帮助读者更好地利用LoadRunner提升应用程序的性能。

一、LoadRunner简介LoadRunner是由Micro Focus公司开发的一款性能测试工具,它可以模拟多种负载条件下的应用程序行为,帮助开发人员评估应用程序的性能与稳定性。

LoadRunner提供了丰富的功能和工具,包括脚本录制、负载生成、性能监控和报告分析等,可用于测试各类应用程序,如Web应用、移动应用和企业应用等。

二、性能自动化测试的基本步骤1. 确定测试目标和需求:在进行性能自动化测试之前,需要明确测试目标和需求,例如确定负载要求、并发用户数、响应时间等指标,以便后续的测试设计和执行。

2. 脚本录制与回放:LoadRunner提供了脚本录制功能,可以通过录制用户在应用程序上的操作来生成测试脚本。

在录制完成后,可以使用脚本回放功能对录制的操作进行模拟,以验证应用程序在负载条件下的性能表现。

3. 参数化和数据驱动:在进行性能测试时,往往需要模拟多个用户的行为。

为了实现这一目标,可以通过参数化和数据驱动的方式来设置不同用户之间的差异。

LoadRunner提供了参数化工具和数据驱动功能,可以轻松地设置和管理测试数据。

4. 脚本调优和编辑:在录制和回放过程中,可能会出现一些不必要或重复的操作,这会影响测试的准确性和效率。

通过对脚本的调优和编辑,可以剔除不必要的操作,减少脚本的体积和执行时间。

5. 负载生成和分析:LoadRunner提供了多种负载测试模式,可以模拟不同负载条件下的应用程序性能。

通过调整负载模式和负载参数,可以对应用程序进行不同负载场景的测试。

测试完成后,可以使用LoadRunner提供的分析工具对测试结果进行统计和分析,以便找出性能问题和瓶颈。

loadrunner监控常用性能指标

一、windows常见计数器Memory:Available Mbytes:可用物理内存数. 如果Available Mbytes的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。

page/sec: 表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。

一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。

有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量)。

Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。

page read/sec:页的硬故障,page/sec的子集,为了解析对内存的引用,必须读取页文件的次数。

阈值为>5. 越低越好。

大数值表示磁盘读而不是缓存读。

由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。

因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:Physical Disk\ % Disk TimePhysical Disk\ Avg.Disk Queue Length例如,包括Page Reads/sec 和% Disk Time 及Avg.Disk Queue Length。

如果页面读取操作速率很低,同时% Disk Time 和Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。

但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

要确定过多的页交换对磁盘活动的影响,请将Physical Disk\ Avg.Disk sec/Transfer 和Memory\ Pages/sec 计数器的值增大数倍。

如果这些计数器的计数结果超过了0.1,那么页交换将花费百分之十以上的磁盘访问时间。

如果长时间发生这种情况,那么您可能需要更多的内存。

loadrunner使用流程

loadrunner使用流程
1.准备工作
在开始使用LoadRunner之前,需要准备一些工作。

首先,需要评估
系统的测试需求,确定测试范围和目标。

其次,需要选择合适的LoadRunner版本,并安装和配置LoadRunner。

最后,需要准备测试环境
和测试数据,包括测试服务器、网络环境、数据库和用户数据等。

2.脚本录制
4.场景设计
场景设计是使用LoadRunner进行性能测试的核心内容。

在场景设计中,需要定义系统的负载模型,包括虚拟用户数量、用户行为模式、网络
带宽、服务器配置等等。

LoadRunner提供了多种场景设计工具,包括负
载模拟器、性能监视器、网络模拟器等。

通过场景设计,可以对系统进行
不同负载下的性能测试,找出系统的瓶颈和性能问题。

5.运行测试
在场景设计完成后,可以开始运行性能测试。

LoadRunner提供了多
种运行模式,包括单用户模式、逐步负载模式、恒定负载模式等。

根据测
试需求,选择合适的运行模式。

在测试过程中,需要监控系统的性能指标,包括响应时间、吞吐量、错误率等。

同时,可以进行实时调整和优化,以
获得更准确和稳定的测试结果。

6.结果分析
测试运行完成后,需要对测试结果进行分析。

LoadRunner提供了丰
富的结果分析工具,包括图表、报表、趋势分析等。

通过分析测试结果,
可以评估系统的性能和稳定性,找出性能瓶颈和优化方案。

同时,还可以生成测试报告,并与相关人员进行沟通和交流。

总结:。

LoadRunner11-遇到问题及解决办法(汇总)

LoadRunner11-遇到问题及解决办法(汇总)LoadRunner11-遇到问题及解决办法1、LoadRunner超时错误:在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产⽣错误的原因也有很多,解决的⽅法也不同。

错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。

错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送⼀个请求到端还没有返回结果,则出现超时错误。

解决办法:⾸先在运⾏环境中对超时进⾏设置,默认的超时时间可以设置长⼀些,再设置多次迭代运⾏,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置⼀个“winlnet replay instead of sockets”选项,再回放是否成功。

2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中⽂乱码,在回放脚本时会使回放停⽌在乱码位置,脚本⽆法运⾏。

错误现象:某个链接或者图⽚名称为中⽂乱码,脚本运⾏⽆法通过。

错误分析:脚本录制可能采⽤的是URL-based script⽅式,如果程序定义的字符集合采⽤的是国际标准,脚本就会出现乱码现象。

解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进⾏设置,在“Recording Options”的“Advanced”选项⾥先将“Surport Charset”选中,然后选中⽀持“UTF-8”的选项。

3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页⾯-404错误提⽰、-500错误提⽰。

tomcat监控与优化

tomcat监控与优化tomcat管理功能的使⽤,tomcat管理功能这对于tomcat⾃⾝及部署在 tomcat上的应⽤进⾏管理的web应⽤,在默认时关闭的,⽤以下⽅法开启[root@localhost ~]# cat /usr/local/tomcat8/conf/tomcat-users.xml<role rolename="manager-gui"/><role rolename="admin-gui"/><user username="tomcat" password="s3cret" roles="manager-gui"/></tomcat-users>禁⽤地址池[root@localhost ~]# cat /usr/local/tomcat8/webapps/manager/META-INF/context.xml<Context antiResourceLocking="false" privileged="true" ><!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />--><Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)? HashMap"/></Context>测试http://192.168.200.111:8080输⼊你的账号密码就可以进⼊了WEB站点部署:公司的架构:开发⼈员开发完代码后放到代码仓库(代码管理软件)主流管理仓库{svn/git}开发⼈员开发完事后,把代码包包装成 war包运维上传到服务器war包直接放到你的⽹页⽬录下,他是⾃⼰直接解压的解压有点慢:[root@localhost ~]# mv jpress-web-newest.war /usr/local/tomcat8/webapps/[root@localhost ~]# ls /usr/local/tomcat8/webapps/docs examples host-manager jpress-web-newest.war manager meminfo meminfo.war ROOT[root@localhost ~]# ls /usr/local/tomcat8/webapps/docs host-manager jpress-web-newest.war meminfo ROOTexamples jpress-web-newest manager meminfo.war在浏览器测试http://192.168.200.111:8080/jpress-web-newest/install下⼀步操作安装数据库[root@localhost ~]# yum -y install mariadb mariadb-server启动数据库[root@localhost ~]# systemctl start mariadb进⼊数据库;mysqlMariaDB [(none)]> create database jp;Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> grant all on jp.* to 'jp'@'localhost' identified by '123456';Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> flush privileges;Query OK, 0 rows affected (0.00 sec)在重启⼀下tomcat就可以使⽤了;tomcat监控:在理想的情况,找开发⼈员给你写个监控界⾯⽅法⼀,⽤的不多需要⽤到 jdk-8u191-linux-x64.tar.gz[root@localhost ~]# jps -lvm4857 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/usr/local/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat8 -Dcatalina.home=/usr/local/tomcat8 -Djava.io.tmpdir=/usr/local/tomcat8/temp 4953 sun.tools.jps.Jps -lvm -Dapplication.home=/usr/local/jdk1.8⽅法三tomcat远程监控功能;很重要在⽂件中输⼊内容;[root@localhost ~]# vim /usr/local/tomcat8/bin/catalina.shCATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=12345-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Djava.rmi.server.hostname=192.168.200.111"完后重启tomcat查看端⼝号关注⼀下 12345 开启没[root@localhost ~]# netstat -lnptActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4612/mysqldtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1536/sshdtcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2679/mastertcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 2975/sshd: root@ptstcp6 0 0 :::36322 :::* LISTEN 5170/javatcp6 0 0 127.0.0.1:8005 :::* LISTEN 5170/javatcp6 0 0 :::8009 :::* LISTEN 5170/javatcp6 0 0 :::8080 :::* LISTEN 5170/javatcp6 0 0 :::56915 :::* LISTEN 5170/javatcp6 0 0 :::22 :::* LISTEN 1536/sshdtcp6 0 0 :::12345 :::* LISTEN 5170/javatcp6 0 0 ::1:25 :::* LISTEN 2679/mastertcp6 0 0 ::1:6010 :::* LISTEN 2975/sshd: root@pts在电脑上安装jdk 此电脑以安装jconsole.exe 启动此程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通过JConsole监控Tomcat1、打开tomcat5的bin目录中的catalina.bat文件,在头部注释部分的后面加上:set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false2、修改JMX远程访问授权。

进入JAVA安装目录的"jre6"lib"management目录,把jmxremote.password.template文件改名为jmxremote.password,去掉最后两行的注释(用户名和密码):monitorRole QEDcontrolRole R&D确保jmxremote.access文件末尾的访问角色没有被注释掉:monitorRole readonlycontrolRole readwrite "createjavax.management.monitor.*,javax.management.timer.* "unregister然后分别选择这两个文件,点右键“属性”-〉安全,点“高级”,去掉“从父项继承....”,弹出窗口中选“删除”,这样删除了所有访问权限。

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

来到权限窗口,勾选"完全控制",点"确定"注:JDK好像需要装在NTFS文件系统下才行3、启动Tomcat4、在命令行输入netstat -an 查看端口8999是否已经打开,如果没有,则是前面的配置没配好。

5、如果已经配置好,则在命令行输入jconsole,打开jdk自带的JMX客户端,选择远程连接,录入tomcat所在机器的IP,端口例192.168.1.100:8999,、密码在jmxremote.password中,如controlRole,密码R&D(缺省monitorRole 只能读,controlRole能读写,jmxremote.access中可配置)。

点“连接”。

参考:/airobot008/archive/2009/03/03/3951524.aspx编写JAVA程序收集Tomcat性能数据import ng.management.MemoryUsage;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Formatter;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import javax.management.MBeanAttributeInfo;import javax.management.MBeanInfo;import javax.management.MBeanServerConnection;import javax.management.ObjectInstance;import javax.management.ObjectName;import positeDataSupport;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;public class MonitorTomcat {/***param args*/public static void main(String[] args) {try{String jmxURL= "service:jmx:rmi:///jndi/rmi://192.168.1.100:8999/jmxrmi";//tomcat jmx urlJMXServiceURL serviceURL = new JMXServiceURL(jmxURL);Map map = new HashMap();String[] credentials = new String[] { "monitorRole", "QED"};map.put("jmx.remote.credentials", credentials);JMXConnector connector =JMXConnectorFactory.connect(serviceURL, map);MBeanServerConnection mbsc =connector.getMBeanServerConnection();//端口最好是动态取得ObjectName threadObjName= new ObjectName("Catalina:type=ThreadPool,name=http-8080");MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);String attrName = "currentThreadCount";//tomcat的线程数对应的属性值MBeanAttributeInfo[] mbAttributes =mbInfo.getAttributes();System.out.println("currentThreadCount:"+mbsc.getAttribute(th readObjName, attrName));//heapfor(int j=0;j <mbsc.getDomains().length;j++){System.out.println("###########"+mbsc.getDomains()[j] );}Set MBeanset = mbsc.queryMBeans(null, null);System.out.println("MBeanset.size() : "+MBeanset.size());Iterator MBeansetIterator = MBeanset.iterator();while(MBeansetIterator.hasNext()) {ObjectInstance objectInstance =(ObjectInstance)MBeansetIterator.next();ObjectName objectName =objectInstance.getObjectName();String canonicalName =objectName.getCanonicalName();System.out.println("canonicalName : "+ canonicalName);if(canonicalName.equals("Catalina:host=localhost,ty pe=Cluster")) {// Get details of cluster MBeansSystem.out.println("Cluster MBeans Details:");System.out.println("========================= ================");//getMBeansDetails(canonicalName);String canonicalKeyPropList =objectName.getCanonicalKeyPropertyListString();}}//------------------------- system ----------------------ObjectName runtimeObjName= new ObjectName("ng: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=new Date((Long)mbsc.getAttribute(runtimeObjName, "StartTime"));SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("启动时间:"+df.format(starttime));Longtimespan=(Long)mbsc.getAttribute(runtimeObjName, "Uptime");System.out.println("连续工作时间:"+MonitorTomcat.formatTimeSpan(timespan));//------------------------ JVM -------------------------//堆使用率ObjectName heapObjName= new ObjectName("ng:type=Memory");MemoryUsage heapMemoryUsage= MemoryUsage.from((CompositeDataSupport)mbsc.getAttribute(heapObjName, "HeapMe moryUsage"));long maxMemory = heapMemoryUsage.getMax();//堆最大long commitMemory = heapMemoryUsage.getCommitted();//堆当前分配long usedMemory = heapMemoryUsage.getUsed();System.out.println("heap:"+(double)usedMemory*100/commitMemor y+"%");//堆使用率MemoryUsage nonheapMemoryUsage= MemoryUsage.from((CompositeDataSupport)mbsc.getAttribute(heapObjName, "NonHea pMemoryUsage"));long noncommitMemory = nonheapMemoryUsage.getCommitted();long nonusedMemory = heapMemoryUsage.getUsed();System.out.println("nonheap:"+(double)nonusedMemory*100/nonco mmitMemory+"%");ObjectName permObjName= new ObjectName("ng:type=MemoryPool,name=Perm Gen");MemoryUsage permGenUsage= MemoryUsage.from((CompositeDataSupport)mbsc.getAttribute(permObjName, "Usage" ));long committed = permGenUsage.getCommitted();//持久堆大小long used = heapMemoryUsage.getUsed();//System.out.println("permgen:"+(double)used*100/committed+"%");//持久堆使用率//-------------------- Session ---------------ObjectName managerObjName= new ObjectName("Catalina:type=Manager,*");Set<ObjectName> s=mbsc.queryNames(managerObjName, null);for(ObjectName obj:s){System.out.println("应用名:"+obj.getKeyProperty("path"));ObjectName objname=new ObjectName(obj.getCanonicalN ame());System.out.println("最大会话数:"+mbsc.getAttribute( objname, "maxActiveSessions"));System.out.println("会话数:"+mbsc.getAttribute( objname, "activeSessions"));System.out.println("活动会话数:"+mbsc.getAttribute( objname, "sessionCounter"));}//----------------- Thread Pool ----------------ObjectName threadpoolObjName= new ObjectName("Catalina:type=ThreadPool,*");Set<ObjectName>s2=mbsc.queryNames(threadpoolObjName, null);for(ObjectName obj:s2){System.out.println("端口名:"+obj.getKeyProperty("name"));ObjectNameobjname=new ObjectName(obj.getCanonicalName());System.out.println("最大线程数:"+mbsc.getAttribute( objname, "maxThreads"));System.out.println("当前线程数:"+mbsc.getAttribute( objname, "currentThreadCount"));System.out.println("繁忙线程数:"+mbsc.getAttribute( objname, "currentThreadsBusy"));}} catch(Exception e) {e.printStackTrace();}}public static String formatTimeSpan(long span){long minseconds = span % 1000;span = span /1000;long seconds = span % 60;span = span / 60;long mins = span % 60;span = span / 60;long hours = span % 24;span = span / 24;long days = span;return(new Formatter()).format("%1$d天%2$02d:%3$02d:%4$02d.%5$03d",days,hours,mins,seconds,minseconds).toString();}}记录的数据:currentThreadCount:150###########JMImplementation###########Users###########.sun.management###########Catalina###########ng###########java.util.loggingMBeanset.size() : 383canonicalName : Catalina:name=HttpRequest152,type=RequestProcessor,worker=http-8080 canonicalName :Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/jsp-examples,j2 eeType=Servlet,name=org.apache.jsp.jsp2.el.basic_002dcomparisons_jsp……canonicalName : Catalina:port=8009,type=MappercanonicalName :Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/jsp-examples,j2 eeType=Servlet,name=org.apache.jsp.dates.date_jsp厂商:Sun Microsystems Inc.程序:Java HotSpot(TM) Client VM 版本:11.3-b02启动时间:2010-02-09 11:36:59连续工作时间:0天00:13:55.775 heap:62.5%nonheap:84.399%perm gen:210.166%应用名:/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参考:/airobot008/archive/2009/03/03/3951524.aspx使用LR的lr_user_data_point函数// This script collects server metrics from the Tomcat Status page (127.0.0.1:8080/manager/status).// Runtime settings are set to run this script once every 5 seconds.double atof (const char *string); /* Explicit declaration */extern char* strtok(char *token, const char *delimiter);CollectMetrics(){int countP, countS, countF, countR, countK;int numValues;static int loggedVersionInfo = FALSE;lr_save_string("127.0.0.1:8080", "ServerName");web_set_max_html_param_len("102480"); // 65536 Note: this may need to be increased.web_set_user("admin","123456","{ServerName}");lr_start_transaction("monitor tomcat");/*<h1>JVM</h1><p> Free memory: 130.99 MB Total memory: 254.18 MB Max memory: 1016.12 MB</p>*/web_reg_save_param("JVMFreeMemory","LB=Free memory: ","RB= MB","Ord=1",LAST);web_reg_save_param("JVMTotalMemory","LB=Total memory: ","RB= MB","Ord=1",LAST);web_reg_save_param("JVMMaxMemory","LB=Max memory: ","RB= MB","Ord=1",LAST);/*<h1>http-8080</h1><p> Max threads: 150 Min spare threads: 25 Max spare threads: 75 Currentthread count: 25 Current thread busy: 2<br>Max processing time: 78 ms Processing time: 0.124 sRequest count: 11 Error count: 3 Bytes received: 0.00 MB Bytes sent: 0.03 MB</p>*/web_reg_save_param("HTTPMaxThreads","LB=Max threads: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPMinSpareThreads","LB=Min spare threads: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPMaxSpareThreads","LB=Max spare threads: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPCurrentSpareThreads","LB=Current thread count: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPCurrentThreadBusy","LB=Current thread busy: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPMaxProcessingTime","LB=Max processing time: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPRequestCount","LB=Request count: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPErrorCount","LB=Error count: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPBytesReceived","LB=Bytes received: ","RB= ","Ord=1",LAST);web_reg_save_param("HTTPBytesSent","LB=Bytes sent: ","RB= ",LAST);/*<h1>jk-8009</h1><p> Max threads: 200 Min spare threads: 4 Max spare threads: 50 Current thread count: 8 Current thread busy: 6 <br> Max processing time: 8031 ms Processing time: 199.1 s Request count: 11279 Error count: 426 Bytes received: 0.00 MB Bytes sent: 100.88 MB</p>*/web_reg_save_param("JKMaxThreads","LB=Max threads: ","RB= ","Ord=2",LAST);web_reg_save_param("JKMinSpareThreads","LB=Min spare threads: ","RB= ","Ord=2",LAST);web_reg_save_param("JKMaxSpareThreads","LB=Max spare threads: ","RB= ","Ord=2",LAST);web_reg_save_param("JKCurrentSpareThreads","LB=Current thread count: ","RB= ","Ord=2",LAST);web_reg_save_param("JKCurrentThreadBusy","LB=Current thread busy: ","RB= ","Ord=2",LAST);web_reg_save_param("JKMaxProcessingTime","LB=Max processing time: ","Ord=2",LAST);web_reg_save_param("JKRequestCount","LB=Request count: ","RB= ","Ord=2",LAST);web_reg_save_param("JKErrorCount","LB=Error count: ","RB= ","Ord=2",LAST);web_reg_save_param("JKBytesReceived","LB=Bytes received: ","RB= ","Ord=2",LAST);web_reg_save_param("JKBytesSent","LB=Bytes sent: ","RB= ","Ord=2",LAST);// Version Information/*<table border="1" cellspacing="0" cellpadding="3"><tr><td colspan="6" class="title">Server Information</td> </tr><tr><td class="header-center"><small>Tomcat Version</small></td><td class="header-center"><small>JVM Version</small></td><td class="header-center"><small>JVM Vendor</small></td><td class="header-center"><small>OS Name</small></td><td class="header-center"><small>OS Version</small></td><td class="header-center"><small>OS Architecture</small></td></tr><tr><td class="row-center"><small>Apache Tomcat/5.5.23</small></td><tdclass="row-center"><small>1.5.0_15-b04</small></td><td class="row-center"><small>Sun Microsystems Inc.</small></td><td class="row-center"><small>Windows 2003</small></td><td class="row-center"><small>5.2</small></td><td class="row-center"><small>x86</small></td></tr></table>*/web_reg_save_param("ServerTomcatVersion","LB=<td class=""row-center""><small>","RB=</small></td>","Ord=1",LAST);web_reg_save_param("ServerJVMVersion","LB=<td class=""row-center""><small>","RB=</small></td>","Ord=2",LAST);web_reg_save_param("ServerJVMVendor","LB=<td class=""row-center""><small>","RB=</small></td>","Ord=3",LAST);web_reg_save_param("ServerOSName","LB=<td class=""row-center""><small>","RB=</small></td>","Ord=4",LAST);web_reg_save_param("ServerOSVersione","LB=<td class=""row-center""><small>","RB=</small></td>","Ord=5",LAST);web_reg_save_param("ServerOSArchitecture","LB=<td class=""row-center""><small>","RB=</small></td>","Ord=6",LAST);/*// Determine number of threads in each state.// P: Parse and prepare request S: Service F: Finishing R: Ready K: Keepaliveweb_reg_save_param("StageTable","LB=<tableborder=""0""><tr><th>Stage</th><th>Time</th><th>B Sent</th><th>B Recv</th><th>Client</th><th>VHost</th><th>Request</th></tr>",//<tr><th>Stage", //</th><th>Time</th><th>B Sent</th><th>B Recv</th><th>Client</th><th>VHost</th><th>Request</th></tr><tr>","RB=</table>","Ord=All", // note that there should only be 2 tables in this test environment.LAST);*/web_reg_find("Text=/manager",LAST);web_url("status","URL={ServerName}/manager/status","Resource=0","RecContentType=text/html","Referer=","Snapshot=t1.inf","Mode=HTTP",LAST);lr_end_transaction("monitor tomcat", LR_AUTO);// Tomcat JVM metricsatof(lr_eval_string("{JVMFreeMemory}")));lr_user_data_point("Tomcat JVM Total memory", atof(lr_eval_string("{JVMTotalMemory}")));lr_user_data_point("Tomcat JVM Max memory", atof(lr_eval_string("{JVMMaxMemory}")));// Tomcat web server metricslr_user_data_point("Tomcat HTTP Max threads", atof(lr_eval_string("{HTTPMaxThreads}")));//lr_user_data_point("Tomcat HTTP Min spare threads", atof(lr_eval_string("{HTTPMinSpareThreads}")));//lr_user_data_point("Tomcat HTTP Max spare threads", atof(lr_eval_string("{HTTPMaxSpareThreads}")));lr_user_data_point("Tomcat HTTP Current spare threads", atof(lr_eval_string("{HTTPCurrentSpareThreads}")));lr_user_data_point("Tomcat HTTP Current thread busy", atof(lr_eval_string("{HTTPCurrentThreadBusy}")));lr_user_data_point("Tomcat HTTP Max processing time", atof(lr_eval_string("{HTTPMaxProcessingTime}")));lr_user_data_point("Tomcat HTTP Request count", atof(lr_eval_string("{HTTPRequestCount}")));lr_user_data_point("Tomcat HTTP Error count", atof(lr_eval_string("{HTTPErrorCount}")));lr_user_data_point("Tomcat HTTP Bytes received", atof(lr_eval_string("{HTTPBytesReceived}")));lr_user_data_point("Tomcat HTTP Bytes sent", atof(lr_eval_string("{HTTPBytesSent}")));// Tomcat servlet container metricslr_user_data_point("Tomcat JK Max threads", atof(lr_eval_string("{JKMaxThreads}")));lr_user_data_point("Tomcat JK Min spare threads", atof(lr_eval_string("{JKMinSpareThreads}")));lr_user_data_point("Tomcat JK Max spare threads", atof(lr_eval_string("{JKMaxSpareThreads}")));lr_user_data_point("Tomcat JK Current spare threads", atof(lr_eval_string("{JKCurrentSpareThreads}")));lr_user_data_point("Tomcat JK Current thread busy", atof(lr_eval_string("{JKCurrentThreadBusy}")));lr_user_data_point("Tomcat JK Max processing time", atof(lr_eval_string("{JKMaxProcessingTime}")));atof(lr_eval_string("{JKRequestCount}")));lr_user_data_point("Tomcat JK Error count", atof(lr_eval_string("{JKErrorCount}")));lr_user_data_point("Tomcat JK Bytes received", atof(lr_eval_string("{JKBytesReceived}")));lr_user_data_point("Tomcat JK Bytes sent", atof(lr_eval_string("{JKBytesSent}")));// Determine number of threads in each state.// Note that there is some complexity in doing this (see code below)...// P: Parse and prepare request S: Service F: Finishing R: Ready K: Keepaliveif (strcmp(lr_eval_string("{StageTable_count}"), "2") != 0) { // Verify that there are only two tables.lr_error_message("Monitoring script expected 2 tables of thread metrics, but instead found %s", lr_eval_string("{StageTable_count}"));} else { // extract the P, S, F, R, and K values from both the tables.// check that there are only 2 tables. Raise an error if there is not...//lr_save_searched_string(const char *buffer, long buf_size, unsigned int occurrence, const char *search_string, int offset, unsigned int string_len, const char *parm_name );// maybe should use strtok for this.//strtok// lr_xml_get_valueslr_output_message("%s",lr_eval_string("{StageTable_1}"));numValues=lr_xml_get_values("XML={StageTable_1}","ValueParam=OutputParam","Query=/tr/td/strong/*","SelectAll=yes", LAST);}// Log Tomcat/JVM version info on the first iteration only.if (loggedVersionInfo != TRUE) {lr_log_message("****** Test Environment Information ******");lr_log_message("%s",lr_eval_string("Tomcat: {ServerTomcatVersion}"));lr_log_message("%s", lr_eval_string("JVM: {ServerJVMVersion} {ServerJVMVendor}"));lr_log_message("%s",lr_eval_string("Operating System: {ServerOSName} {ServerOSVersione} {ServerOSArchitecture}"));lr_log_message("************************* *****************");loggedVersionInfo = TRUE;}return 0;}参考:.au/tech-tips/monitoring-tomcat/使用SiteScope监控Tomcat1、安装SiteScopeLR9.5的安装包中附带了SiteScope9.5的安装文件"Additional Components"Sitescope"SiteScope 9.502、配置SiteScope新建监视器,选择JMX类别输入Tomcat的JMX URL地址,例如:service:jmx:rmi:///jndi/rmi://192.168.1.100:8999/jmxrmi用户名:monitorRole密码:QED添加计数器,例如:ng/Memory/HeapMemoryUsage/usedng/Memory/HeapMemoryUsage/maxCatalina/ThreadPool/jk-8010/currentThreadCountCatalina/ThreadPool/jk-8010/maxSpareThreadsCatalina/ThreadPool/jk-8010/minSpareThreads然后就可以在LR的Controller中连接SiteScope对Tomcat进行监控。

相关文档
最新文档