对于性能测试,只看数据库服务器和应用服务器的一些指标似乎毫无头绪。直接对数据库和中间件进行监控势在必行。今天实践一则通过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配置/应用程序进行结合分析啦~