zoukankan      html  css  js  c++  java
  • 在大负载中使用LoadRunner进行负载测试()

    在大负载中使用LoadRunner进行负载测试,需要配置一些环境来满足大负载下各种资源的充足:

    1.为了避免出现“No Buffer Space Available”的错误,需要进行如下配置:

       1)修改注册表:

          * 设置“HKEY_LOCAL_MACHINESystemCurrentControlSetServices cpipPar
    ametersTcpTimedWaitDelay”为 30
          * 设置“HKEY_LOCAL_MACHINESystemCurrentControlSetServices cpipPar
    ametersMaxUserPort”为 65534
          * 在“HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSession
    ManagerSub SystemsWindows”设置SharedSection 为 4096

        2)通过在每个脚本的开头添加如下函数来设置“SHUTDOWN”模式为"ABRUPT"

         web_set_sockets_option(“SHUTDOWN_MODE”,”ABRUPT”)

    2.关闭所有的杀毒,反间谍扫描软件等。同时也关闭任务扫描和所有不需要的服务。

    3.脚本运行时设置:

       1)设置日志为“只在错误发生时发送信息”

       2)去掉错误时产生snapshot的选项

       3)在miscellaneous上,去掉 定义每一步为一个事务 的选项

       4)不选择 模拟浏览器缓存,选上“simulate new user on each iteration”和它的子选项

    4.如果下载的页没有资源,在web_url函数中添加“Mode=HTTP”,这样会减少LG上的负载(不用转换成HTML)。默认情况下,web_url的Mode为Mode=HTML

    5.重启LG并且确保他们都能跟Controller连接.

    6.确保LG和控制器上有足够的剩余磁盘空间.

    7.在controller中去掉web page breakdown

    8.限制Vuser在所有LG上同时进行初始化的数目.可以在Controller的Tools > Options > Run-Time Settings中进行修改.每个LG都有这个设置.

    9.限制controller在运行时存储的错误数.通过修改wlrun.ini中的[output]项来实现:

      • FlagLimitOutputMessages=1
      • MaxNumberOfOutputMessages=<errors count> (default is 10,000)

    10.在Controller上修改Monitor的采样率来降低CPU的使用.可以在Controlller的Tools > Options > Monitors 下修改,如下图所示:



    11. 如果有很多错误产生,最好不要经常打开Error/Output窗口,因为这样会因为访问数据库而打开另外的数据库连接.

    12.负载测试中不要使用"Show Vuser"选项.

    13.把输出信息重定向到一个文本文件中来代替输出到mdb文件中.可以在wlrun7.ini中修改[output]下的

    ExportMessageToFile=1来实现.

    14.不要在Controller机器上运行虚拟用户.

    15.在场景中设置监视器:

      * 内存使用上 mmdrv进程的private bytes

      * disk使用

      * CPU使用

      * 网络使用

    16.把脚本中所与打印信息的脚本去掉.如下面的代码每次迭代都会调用一次,对大量并发用户的运行产生负面的影响.

    lr_vuser_status_message("pIteration: %s -
    START Action", lr_eval_string("{pIteration}"));
    lr_output_message("pIteration: %s - START Action", lr_eval_string("{pIteration}"));

    Controller处理所有虚拟用户的信息,这样会大大降低Controller的性能. 如下是类似的代码:

    web_reg_find("Text=Time on Server", "SaveCount=cErr", ..);
    web_url( some url …);
    if (atoi(lr_eval_string("{cErr}"))>0) {
    lr_error_message(some message);
    lr_end_transaction("S05_T01_Request_Content_Page", LR_FAIL);
    }

      通常认为在脚本中插入lr_error_message是不好的,除非是调用的客户化的API失败了才有必要插入该语句.如果是LoadRunner的函数调用失败(如上面的web_url调用),它会自动发送一个错误消息.

      在大量用户运行的情况下,控制Controller和LG之间的通信流量是非常重要的.发送多余的信息(错误,输出等信息)会增大通信流量降低负载能力.所以,通常都需要把代码中不必要的信息去掉.

    17.去掉脚本中所有的sleep()的调用,用lr_think_time()来代替.lr_think_time给LR让出控制,即LR能够在Vuser休眠的时候去做其他有用的事情.

    18.不要去掉lr_think_time:使用该函数能更准确的模拟负载,对LG产生相对小的压力

    19.web_reg_save_param和web_reg_find()函数:

       • 在 web_reg_save_param() 中添加“Notfound=empty” 参数.
       • 在 web_reg_find() 添加 "Savecount=some_parameter_name". 如果你想知道它是否成功可以使用atoi(lr_eval_string("{some_paramater_name }"))来衡量.

    20.其他

      可能会出现的问题:

       * 测试产生了太多的错误:

         错误引擎不能处理多于1.5GB的错误

         如果测试过程中每秒产生多与1000个错误,Controller的行为将不可预测

       * 测试产生了大量的在线数据

    上面的两个问题都可以使用如下的方法解决:

       例如: 场景是一个组有1000个虚拟用户

       可以把这个组分成两个组:

       G1 100 Vusers
       G2 900 Vusers

       这两个组可以跟原始的组产生一样的负载,对于G2在组命令行中添加如下参数:

       -disable_data -disable_messages

        _disable_data : 让这个组不发送任信息,不发送任何online信息,不写任何offline信息.

        _disable_message: 让这个组不给Controller发送任何信息(错误,日志)

    注意:使用上面的命令行选项会使该LG不给congtroller发送online和offline信息.这样这个组上的虚拟用户的分析数据就收集不到了.

    21.如果需要远程访问,Mercury仅支持PC anywhere.

    翻译自<LoadRunner Large Load Test Considerations>

  • 相关阅读:
    差分约束系统详解
    AC自动机详解
    KMP算法详解
    ST算法详解
    Trie详解
    欧拉路径详解
    树上差分详解
    LCA详解
    树链剖分详解
    树的直径详解
  • 原文地址:https://www.cnblogs.com/zhengah/p/5064238.html
Copyright © 2011-2022 走看看