对于性能测试,只看数据库服务器和应用服务器的一些指标似乎毫无头绪。直接对数据库和中间件进行监控势在必行。今天实践一则通过loadrunner脚本实现对tomcat的监控。(属于重复造轮子)

一、首先需要配置一个tomcat用户,manager-gui角色
1、配置Tomcat登录用户,找到tomcat9目录下的/conf/ tomcat-users.xml,添加配置如下:
<role rolename="manager-gui"/> <user username="name" password="password" roles="manager-gui"/>
注意:其中name、password 分别为设置的用户名和密码;且不应向具有管理GUI角色的用户授予管理脚本的角色。
2、tomcat9同时还需要修改,如无新建conf/Catalina/localhost/manager.xml 内容如下:
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
无须重启tomcat即可生效。
3、在http://IP:port/页面验证下能不能登录
主要保证能访问http://IP:port/manager/status

说明:IP 为本机IP地址;port 为tomcat端口号,默认为8080,可以在Tomcat的conf文件下server.xml中修改:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
二、准备脚本
1、在原Acion()后面新建一个Action(),自行命名,如Action_tomcat()。
2、通过web_set_user()函数设置tomcat登录用户信息并使用web_url()模拟登录后打开status页面。
web_set_user("name","password","IP:port");
web_url("status",
"URL=http://IP:port/manager/status",
"Resource=0",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
3、利用关联函数web_reg_save_parm()动态地捕获想要的数据(字符串格式),例如获取MaxThreads点值:
web_reg_save_param("HTTP_MaxThreads",
"LB=Max threads: ",
"RB= ",
"Ord=1",
LAST);
注意:放置 web_reg_save_parm() 在获取动态值的步骤之前;即此函数,应该放在上面登录步骤( web_set_user )之前。
4、使用atof()函数将获取的字符串数据转化为浮点数形式
double atof(const char * string);
5、使用lr_user_data_point()函数自动记录一个自定义的数据标识,以MaxThreads为例:
lr_user_data_point("Tomcat_HTTP_MaxThreads",atof(lr_eval_string("{HTTP_MaxThreads}")));
说明:lr_user_data_point()函数 用来记录一条自定义的Vuser运行数据,并将其输出到测试结果中,最后可以通过分析工具Analysis来分析数据采集情况。
6、考虑增加thinktime(思考时间),视情况自行斟酌多少。(这个是采集时间间隔,一定要加)
完整的Loadrunner Action 脚本如下:
Action_tomcat()
{
//显示申明atof函数
//该函数功能:把字符串转换成浮点数
//返回值:每个函数返回 double 值,此值由将输入字符作为数字解析而生成.如果该输入无法转换为该类型的值,则返回值为 0.0
double atof(const char * string);
//手动关联保存剩余内存值在变量 "FreeMemory"中
web_reg_save_param("FreeMemory",
"LB=Free memory: ",
"RB= MB",
"Ord=1",
LAST);
//手动关联保存总的内存值在变量 "TotalMemory"中
web_reg_save_param("TotalMemory",
"LB=Total memory: ",
"RB= MB",
"Ord=1",
LAST);
//手动关联保存最大内存值在变量 "MaxMemory"中
web_reg_save_param("MaxMemory",
"LB=Max memory: ",
"RB= MB",
"Ord=1",
LAST);
//手动关联保存最大http请求最大线程值在变量 "MaxThreads"中
web_reg_save_param("MaxThreads",
"LB=Max threads: ",
"RB= ",
"Ord=1",
LAST);
//手动关联保存最大http请求最大进程值在变量 "MaxProcessingTime"中
web_reg_save_param("MaxProcessingTime",
"LB=Max processing time: ",
"RB= s",
"Ord=1",
LAST);
//手动关联保存http请求数在变量 "RequestCount"中
web_reg_save_param("RequestCount",
"LB=Request count: ",
"RB= ",
"Ord=1",
LAST);
//手动关联保存http接收的字节数在变量 "BytesReceived"中
web_reg_save_param("BytesReceived",
"LB=Bytes received: ",
"RB= MB",
"Ord=1",
LAST);
//用户登录tomcat
web_set_user("root","123456","127.0.0.1:8080");
//设置思考时间为3秒
lr_think_time(3);
//根据函数中的URL属性加载对应的URL,不需要上下文,并登陆
web_url("status",
"URL=http://127.0.0.1:808/manager/status",
"Resource=0",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
/*
int lr_user_data_point (const char *sample_name, double value);
函数名:lr_user_data_point
参数列表:onst char *sample_name, double value
功能:用来记录一条自定义的Vuser运行数据,并将其输出到测试结果中,最后可以通过分析工具Analysis来分析数据采集情况
*/
lr_user_data_point("Tomcat_FreeMemory",atof(lr_eval_string("{FreeMemory}")));
lr_user_data_point("Tomcat _TotalMemory",atof(lr_eval_string("{TotalMemory}")));
lr_user_data_point("Tomcat_MaxMemory",atof(lr_eval_string("{MaxMemory}")));
lr_user_data_point("Tomcat_MaxThreads",atof(lr_eval_string("{MaxThreads}")));
lr_user_data_point("Tomcat_MaxProcessingTime",atof(lr_eval_string("{MaxProcessingTime}")));
lr_user_data_point("Tomcat_ProcessingTime",atof(lr_eval_string("{ProcessingTime}")));
lr_user_data_point("Tomcat_RequestCount",atof(lr_eval_string("{RequestCount}")));
lr_user_data_point("Tomcat_BytesReceived",atof(lr_eval_string("{BytesReceived}")));
return 0;
}
三、场景运行验证
1、正常运行一个场景
2、生成场景分析文件
3、添加Graphs,选择用户定义的数据点

4、查看生成的结果
(Average)

(Sum)

5、最后就是将结果和tomcat配置/应用程序进行结合分析啦~