LR监控tomcat服务器

时间:2020-12-13 03:04:50

采用编写VuGen脚本访问Tomcat的Status页面的方式获取性能数据(利用了关联和lr_user_data_point函数),本质上还是使用tomcat自带的监控页面,只是将监控结果加到LR的analysis中。具体步骤如下:

1)首先确保Tomcat中创建了必要权限的用户(编辑Tomcat的\conf目录下的tomcat-users.xml文件),然后在LoadRunner中编写脚本(根据不同版本的tomcat监控结果中的监控数据项会有些差别,根据情况更改脚本):

double atof (const char *string);
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(""); web_set_user("admin",
"admin",
"{ServerName}"); lr_start_transaction("monitor tomcat"); 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); 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= ",
"Ord=1",
LAST); 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: ",
"RB= ",
"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); web_reg_find("Text=/manager",
LAST); web_url("status",
"URL=http://{ServerName}/manager/status",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST); lr_end_transaction("monitor tomcat", LR_AUTO); // 写入Tomcat JVM 度量数据
lr_user_data_point("Tomcat JVM Free memory", atof(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 度量数据
lr_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 度量数据
lr_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}")));
lr_user_data_point("Tomcat JK Request count", 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}"))); return ;
}

2)然后在Run-time中设定数据收集的间隔:

LR监控tomcat服务器

3)最后在Controller中设置脚本运行,这样场景运行完毕后,即可在Analysis中添加“User Defined Data Points”查看收集到的Tomcat性能数据:

LR监控tomcat服务器

 这种收集数据的弊端是需要通过网络请求Tomcat的页面,会对Tomcat服务器的性能造成一定的影响如果Tomcat出现性能瓶颈,则收集数据时也可能碰到连接错误,因此,最好把收集数据点的间隔设大一点,例如5秒~10秒收集一个数据点。或尽量不采用LR监控。