• LR监控tomcat服务器


    采用编写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("65536"); 
    
        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 0;
    }

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

          

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

          

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

  • 相关阅读:
    WebService学习--(一)webservice相关概念
    根据日期推断某天某周某日
    Eclipse快捷键
    Java IO学习--(五)字节和字符数组
    Java IO学习--(四)网络
    Java IO学习--(三)通道
    Java IO学习--(二)文件
    Java IO学习--(一)概述
    JVM学习--(八)java堆分析
    Linux加密、安全版块、root密码破解
  • 原文地址:https://www.cnblogs.com/yezhaohui/p/10125572.html
Copyright © 2020-2023  润新知