PMP ,专注于WEB功能测试、性能测试、安全测试的研究,从事全面质量管理工作。曾任多家公司测试经理、测试主管。在电子政务、银行、电商、跨境电商、直播电商领域工作多年,曾获得某龙头集团公司公测一等奖,曾任职某头部直播电商公司测试团队负责人,具有业务敏感性,擅长从0到1搭建测试团队,具有海外工作经历,以及质量管理体系搭建。邮箱:89233502@qq.com

发布新日志

  • nmon学习笔记

    2015-07-03 17:53:42

    nmon学习笔记 见附件
  • nmon学习笔记

    2015-07-03 17:51:19

    windows

    1 如何获取windows计数器:
    Lr:System Resouce Graphs-windowsResources ,右键资源,添加Machine,输入Name的IP地址,
    就能监控某个IP的windows资源

    2 任务管理器
      taskmgr

    2 性能监视器
      perfmon


    Linux:

    查看服务器是几cpu还是几核:

    cat /proc/cpuinfo | grep "physical id" | sort |uniq |wc -l

    cat /proc/cpuinfo |grep "cpu cors"|uniq



    Linux 系统资源常用命令
    cpu:top/vmstat/mpstat/iostat/sar

    memory:top/free/vmstat/iostat/sar/mpstat

    Disk IO:vmstat/iostat/mpstat/sar


    top命令:
    1:当前时间,系统启动时间,当前系统登录用户,平均负载
    2:所有启动进城,目前运行的,挂起,无用
    3:目前cpu使用情况
    4:物理内存,已用内存,空闲内存,缓冲区占用


    uptime:
    当前时间、系统运行多久,目前有多少登陆用户,系统过去1,5,15分钟平均负载
    一般load average<3良好,大于5有问题,平均负载为1


    free:
    显示内存使用情况,使用权限是所有用户。
    如:free -s 2 -m 每2秒刷新一次内存使用情况

    meminfor:cat /proc/meminfor

    vmstat:
    显示虚拟内存,磁盘,页交换区,cpu活动统计信息。
    swap:页交换空间大小
    so:如果swap过多,表明物理 内存不足


    netstat:

    iotstat、sar命令不识别,需要安装linux时将该命令安装上。

    sar用来数cpu使用率、内存、网络、进程活动、磁盘活动

    LR获取Linux指标:
    1、lr-system resouces graphs 
       Unix-resouces-add Machine-输入IP地址,(需要安装RPC,启动后才可获取到)

    2、实时监控-linux命令

    2、第三方监控工具(只支持linux)
    nmon/glance

    nmon工具:

    1、下载nmon版本与操作系统版本要匹配
    2、权限-可执行权限

    使用方法:
    1、#./nmon c m d n t
    2、 记录文件 ./nmo -F res_项目简称_mix_app_用户数_时间日期.nmon -s 2 -c 1800 &
         2秒取一次 ,取1800次,写入到文件中,进程关闭不再执行。
     
    分析nmon结果:cpu 内存 磁盘 网络

    打开nmon文件出现问题,sheet页的行数超过最大范围,进行规律拆分,将“总表头”放在每个文件中。


    做过优化,改过程序,测试全部重做。

    业务数据监控目的:
    手段:
    1、检查点,检查数据是否操作成功。
    2、业务数据监控手段:数据库,对于DML操作,
    3、利用log输入函数查看日志数据是否操作成功。
  • nmon学习笔记

    2015-07-03 17:48:42

    1 如何获取windows计数器:
    Lr:System Resouce Graphs-windowsResources ,右键资源,添加Machine,输入Name的IP地址,就能监控某个IP的windows资源

    2 任务管理器
      taskmgr

    2 性能监视器
      perfmon


    Linux:

    查看服务器是几cpu还是几核:

    cat /proc/cpuinfo | grep "physical id" | sort |uniq |wc -l

    cat /proc/cpuinfo |grep "cpu cors"|uniq



    Linux 系统资源常用命令
    cpu:top/vmstat/mpstat/iostat/sar

    memory:top/free/vmstat/iostat/sar/mpstat

    Disk IO:vmstat/iostat/mpstat/sar


    top命令:
    1:当前时间,系统启动时间,当前系统登录用户,平均负载
    2:所有启动进城,目前运行的,挂起,无用
    3:目前cpu使用情况
    4:物理内存,已用内存,空闲内存,缓冲区占用


    uptime:
    当前时间、系统运行多久,目前有多少登陆用户,系统过去1,5,15分钟平均负载
    一般load average<3良好,大于5有问题,平均负载为1


    free:
    显示内存使用情况,使用权限是所有用户。
    如:free -s 2 -m 每2秒刷新一次内存使用情况

    meminfor:cat /proc/meminfor

    vmstat:
    显示虚拟内存,磁盘,页交换区,cpu活动统计信息。
    swap:页交换空间大小
    so:如果swap过多,表明物理 内存不足


    netstat:

    iotstat、sar命令不识别,需要安装linux时将该命令安装上。

    sar用来数cpu使用率、内存、网络、进程活动、磁盘活动

    LR获取Linux指标:
    1、lr-system resouces graphs 
       Unix-resouces-add Machine-输入IP地址,(需要安装RPC,启动后才可获取到)

    2、实时监控-linux命令

    2、第三方监控工具(只支持linux)
    nmon/glance

    nmon工具:

    1、下载nmon版本与操作系统版本要匹配
    2、权限-可执行权限

    使用方法:
    1、#./nmon c m d n t
    2、 记录文件 ./nmo -F res_项目简称_mix_app_用户数_时间日期.nmon -s 2 -c 1800 &
         2秒取一次 ,取1800次,写入到文件中,进程关闭不再执行。
     
    分析nmon结果:cpu 内存 磁盘 网络

    打开nmon文件出现问题,sheet页的行数超过最大范围,进行规律拆分,将“总表头”放在每个文件中。


    做过优化,改过程序,测试全部重做。

    业务数据监控目的:
    手段:
    1、检查点,检查数据是否操作成功。
    2、业务数据监控手段:数据库,对于DML操作,
    3、利用log输入函数查看日志数据是否操作成功。
  • 高流量大并发Linux TCP性能调优

    2015-02-27 18:05:53

    其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。
      本文参考文章为:
      优化Linux下的内核TCP参数来提高服务器负载能力
      Linux Tuning
      本文所面对的情况为:
      高并发数
      高延迟高丢包(典型的美国服务器)
      值得注意的是,因为openvz的VPS权限比较低,能够修改的地方比较少,所以使用openvz的VPS作VPN服务器是非常不推荐的。
      我们通过修改 /etc/sysctl.conf 来达到调整的目的,注意修改完以后记得使用:
      sysctl -p
      来使修改生效。
      首先,针对高并发数,我们需要提高一些linux的默认限制:
      fs.file-max = 51200
      #提高整个系统的文件限制
      net.ipv4.tcp_syncookies = 1
      #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
      net.ipv4.tcp_tw_reuse = 1
      #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
      net.ipv4.tcp_tw_recycle = 0
      #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
      #为了对NAT设备更友好,建议设置为0。
      net.ipv4.tcp_fin_timeout = 30
      #修改系統默认的 TIMEOUT 时间。
      net.ipv4.tcp_keepalive_time = 1200
      #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
      net.ipv4.ip_local_port_range = 10000 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!)
      net.ipv4.tcp_max_syn_backlog = 8192
      #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
      net.ipv4.tcp_max_tw_buckets = 5000
      #表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。
      #额外的,对于内核版本新于**3.7.1**的,我们可以开启tcp_fastopen:
      net.ipv4.tcp_fastopen = 3
      其次,针对大流量高丢包高延迟的情况,我们通过增大缓存来提高 TCP 性能,自己看E文注释吧……感觉我翻译出来各种味道不对 = =:
    # increase TCP max buffer size settable using setsockopt()
    net.core.rmem_max = 67108864
    net.core.wmem_max = 67108864
    # increase Linux autotuning TCP buffer limit
    net.ipv4.tcp_rmem = 4096 87380 67108864
    net.ipv4.tcp_wmem = 4096 65536 67108864
    # increase the length of the processor input queue
    net.core.netdev_max_backlog = 250000
    # recommended for hosts with jumbo frames enabled
    net.ipv4.tcp_mtu_probing=1
      这里面涉及到一个 TCP 拥塞算法的问题,你可以用下面的命令查看本机提供的拥塞算法控制模块:
      sysctl net.ipv4.tcp_available_congestion_control
      如果没有下文提到的htcp,hybla算法,你可以尝试通过modprobe启用模块:
      /sbin/modprobe tcp_htcp
      /sbin/modprobe tcp_hybla
      对于几种算法的分析,详情可以参考下: TCP拥塞控制算法 优缺点 适用环境 性能分析 ,但是这里面没有涉及到专门为卫星通讯设计的拥塞控制算法:Hybla。根据各位大神的实验,我们发现Hybla算法恰好是最适合美国服务器的 TCP 拥塞算法,而对于日本服务器,个人想当然的认为htcp算法应该可以比默认的cubic算法达到更好的效果。但是因为htcp算法恰好没有编入我们所使用的VPS中,所以没办法测试
      #设置 TCP 拥塞算法为 hybla
      net.ipv4.tcp_congestion_control=hybla
  • linux/win下安装loadrunner步骤详解

    2014-05-28 17:50:27

    linux-loadruner :安装于linux 下的loadrunner genarater
    安装步骤参考:http://4951507.blog.51cto.com/4941507/1099487
    linux下安装loadrunner时:需要安装一下compat-libstdc++-33-3.2.3-69 软件包
    (参考文档:http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r1mx/index.jsp?topic=/com.ibm.websphere.wps.610.doc/doc/tins_rhel_packages.html)
    ps:此安装包安装的原因:由于我在虚拟机安装loadrunner时报错找不到库函数,因此安装了一下这个包;如果安装过程中没有出现安装错误可以不安装
    win-loadrunner :安装于win 下的loadrunner 
    安装步骤参考:http://www.doc88.com/p-776376392972.html
    win下安装loadrunner时:
    1win loadrunner版本:loadrunner11
    2破解:必须装
     先执行lr_del
     再将loadrunner8.0里面的文件拷贝到安装目录下(比如我的安装目录为:C:\Program Files (x86)\HP\LoadRunner\bin)
    3中文插件(可装可不装,按照个人需求)
    4补丁(第一次安装可不装)

    ps:由于loadrunner11太大,不能共享;推荐下载网址:

    http://www.loadrunnercn.com/thread-5-1-1.html

    其他安装所需软件(金山快盘共享):http://www.kuaipan.cn/share.htm?s=aXw1IijcaKElxubW-A4fsFwAAAQ4=


  • linux/win下安装loadrunner步骤详解

    2014-05-28 17:50:27

    linux-loadruner :安装于linux 下的loadrunner genarater
    安装步骤参考:http://4951507.blog.51cto.com/4941507/1099487
    linux下安装loadrunner时:需要安装一下compat-libstdc++-33-3.2.3-69 软件包
    (参考文档:http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r1mx/index.jsp?topic=/com.ibm.websphere.wps.610.doc/doc/tins_rhel_packages.html)
    ps:此安装包安装的原因:由于我在虚拟机安装loadrunner时报错找不到库函数,因此安装了一下这个包;如果安装过程中没有出现安装错误可以不安装
    win-loadrunner :安装于win 下的loadrunner 
    安装步骤参考:http://www.doc88.com/p-776376392972.html
    win下安装loadrunner时:
    1win loadrunner版本:loadrunner11
    2破解:必须装
     先执行lr_del
     再将loadrunner8.0里面的文件拷贝到安装目录下(比如我的安装目录为:C:\Program Files (x86)\HP\LoadRunner\bin)
    3中文插件(可装可不装,按照个人需求)
    4补丁(第一次安装可不装)

    ps:由于loadrunner11太大,不能共享;推荐下载网址:

    http://www.loadrunnercn.com/thread-5-1-1.html

    其他安装所需软件(金山快盘共享):http://www.kuaipan.cn/share.htm?s=aXw1IijcaKElxubW-A4fsFwAAAQ4=


  • (转)linux下安装loadrunner步骤以及出错解决方法(外加linux下ip地址欺骗)

    2014-05-28 17:48:36

    1. 到官方网站到HP官网下载Load Generator 安装文件 _Load_Generator_11.00_T7330-15010.iso或者其它网站下载loadrunner-11-load-generator.iso

    2.确认linux下安装c++,或者安装了c++但是与Load Generator 解析的c++文件不匹配时需要下载c++包,我这里下载的是:compat-libstdc++-33-3.2.3-69.el6.i686.rpm

    确认安装c++命令:rpm - q(ps:-与q之间有空格,出现usage)

    安装c++包命令:rpm -ivh compat-libstdc++-33-3.2.3-69.el6.i686.rpm(ps:-与ivh之间没有空格)

    安装包地址已共享:安装linux下loadrunner所需软件

    3.解压loadrunner-11-load-generator.iso,解压改文件需先创建一个空目录用于挂载解压后的文件

    eg: 

    第一步:先创建一个目录用于存放loadrunner-11-load-generator.iso和libstdc++-33-3.2.3-69.el6.i686.rpm;

       mkdir /sysvol/must_soft

    第二步:创建一个空目录用于挂载解压后的文件

       mkdir /sysvol/loadrunner

    第三步:解压loadrunner-11-load-generator.iso

    mount -o loop loadrunner-11-load-generator.iso  /sysvol/loadrunner

    (ps:这里使用loop挂载:使用loop的原因


    解压成功后能看到挂载目录,并且解压之后解压目录有三个文件:Hp  Linux  Solaris



    第四步:进入Linux 目录执行./installer.sh  选择:n----a----i----f 即安装完毕,安装完成之后的loadrunner的执行目录在/opt/HP/HP_LoadGenerator(默认位置)


    4.配置环境: 

    (1)查看自己的环境下是哪一种shell ( echo $0),我的环境下查看的为:/bin/bash

    【1】添加用户:useradd -g 0 -s /bin/bash hp_load

    【2】在root用户下,/root/.bashrc中添加环境变量:

    (这些环境变量来自于/opt/HP/HP_LoadGenerator/ env.csh)

    export PRODUCT_DIR=/opt/HP/HP_LoadGenerator
    export M_LROOT=$PRODUCT_DIR
    export LD_LIBRARY_PATH=${M_LROOT}/bin 
    export PATH=${M_LROOT}/bin:$PATH

     

    执行:source /root/.bashrc

    (2)验证loadrunner是否安装成功

        [1]切换到hp_load用户:su hp_load

        [2]cd /opt/HP/HP_LoadGenerator/bin/

           ./verify_generator

    若出现以下图1,表示刚刚在/root/.bashrc下的环境变量设置成功

    若出现以下图2,表示刚刚的环境变量设置失败,需重设图2:

    图2

     出现图一:表示还需要设置一下DISPLAY环境变量

    设置方法:在终端:export DISPLAY=192.168.8.188:0.0(ps:192.168.8.188为controller 服务器)

    如果在用户hp_load中无法export换成root用户重新export再切换到hp_load用户,执行确认是否安装成功的命令

    cd /opt/HP/HP_LoadGenerator/bin/;./verify_generator),出现下图表示刚刚的export成功


    此时验证是否成功已经不报:verify_generator must have a DISPLAY set, please set and rerun;而是报/tmp的权限问题。现在把/tmp目录改成777的权限即可:命令为:chmod 777 /tmp(ps :此操作需要在root用户下执行);再进行上一步的操作,出现下图所示:

    [hp_load@localhost bin]$ ./verify_generator 
    ===================================================
                  HP
         Vuser Environment Verification Utility
    ===================================================


    Product: LoadRunner 11.0 
    Version: 11.0.0.8866 
    Build: 8866  




    localhost.Infoworks: 


    verify_generator...OK
    verify_generator...OK
    verify_generator...OK 
    Don't forget to make sure that the name of the controller machine 
    is also in .rhosts 
    Verify $M_LROOT ...Failed 
    _____It was not possible to set the $M_LROOT from 
    _____the shell dot files. One of several things might be happening: 
    _____1) $M_LROOT is not set at all in the shell dot files. 
    _____2) There is some error in the shell dot files which stops their execution 
    _____   before it sets $M_LROOT. 
    _____3) There is conditional code in the shell dot files (most likely related to 
    _____   interactive and non interactive shells) and $M_LROOT is set 
    _____   only in one of the sections. 
    _____Aborting virtual user tests on host localhost.Infoworks 
    verify_generator...OK 
    _______________________________________________


    Summary:
    ________
    Vuser Host localhost.Infoworks: Failed


    验证ok,(ps:Vuser Host localhost.Infoworks: Failed此错误目前没有影响loadrunner代理的正常启动,暂不用考虑)


    5.启动linux下的loadrunner负载

    cd /opt/HP/HP_LoadGenerator/bin

    [hp_load@localhost bin]$ ./m_daemon_setup start
    m_agent_daemon ( 8273 ), 

    表示已经启动成功


    这些问题是我在安装过程中遇到的常规问题,如果还有其他的问题可以参考下面几个网址:

    http://wenku.baidu.com/view/bf4d761cff00bed5b9f31d99.html

    http://wenku.baidu.com/view/db72a74ce45c3b3567ec8b26.html


    linux下loadrunner 的ip地址欺骗:

    步骤一:添加虚拟网卡,用于配置可以欺骗的ip地址(注:用于ip地址欺骗的地址必须保证无人正在使用,一般公司里需要向it部门申请空闲ip地址段,以免照成网络使用混乱)

    一般写脚本用于添加虚拟网卡:

    直接配置虚拟网卡: eg: ifconfig em1:2 192.168.82.111 netmask 255.255.252.0

    add_network.sh

    #!/bin/bash
    ifconfig em1:1 192.168.82.110 netmask 255.255.252.0
    ifconfig em1:2 192.168.82.111 netmask 255.255.252.0
    ifconfig em1:3 192.168.82.112 netmask 255.255.252.0

    -----ip地址192.168.82.110~192.168.82.112均为空闲ip并且能够连接需要测试的服务器ip

    网卡配置完之后如下图所示:



    使用ip欺骗时需注意:
    1.要使用it部门给的可用ip列表,防止云平台的ip使用混乱
    2.使用完成之后最好释放ip资源(如果用xp就直接释放;如果用linux就service network restart就会还原)

  • Java 垃圾回收策略调优

    2014-05-12 18:20:12

    JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,dell2950服务器,网站是shedewang.com,新手可能觉得这文章没有用。 

    一:串行垃圾回收,也就是默认配置,完成10万request用时153秒,JVM参数配置如下 
    $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps "; 
    这种配置一般在resin启动24小时内似乎没有大问题,网站可以正常访问,但查看日志发现,在接近24小时时,Full GC执行越来越频繁,大约每隔3分钟就有一次Full GC,每次Full GC系统会停顿6秒左右,作为一个网站来说,用户等待6秒恐怕太长了,所以这种方式有待改善。MaxTenuringThreshold=7表示一个对象如果在救助空间移动7次还没有被回收就放入年老代,GCTimeRatio=19表示java可以用5%的时间来做垃圾回收,1/(1+19)=1 /20=5%。 

    二:并行回收,完成10万request用时117秒,配置如下: 
    $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xmx2048M -Xms2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=500 -XX:+UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 "; 
    并行回收我尝试过多种组合配置,似乎都没什么用,resin启动3小时左右就会停顿,时间超过10 秒。也有可能是参数设置不够好的原因,MaxGCPauseMillis表示GC最大停顿时间,在resin刚启动还没有执行Full GC时系统是正常的,但一旦执行Full GC,MaxGCPauseMillis根本没有用,停顿时间可能超过20秒,之后会发生什么我也不再关心了,赶紧重启resin,尝试其他回收策略。 

    三:并发回收,完成10万request用时60秒,比并行回收差不多快一倍,是默认回收策略性能的2.5倍,配置如下: 
    $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 "; 
    这个配置虽然不会出现10秒连不上的情况,但系统重启3个小时左右,每隔几分钟就会有5秒连不上的情况,查看gc.log,发现在执行ParNewGC时有个promotion failed错误,从而转向执行Full GC,造成系统停顿,而且会很频繁,每隔几分钟就有一次,所以还得改善。UseCMSCompactAtFullCollection是表是执行Full GC后对内存进行整理压缩,免得产生内存碎片,CMSFullGCsBeforeCompaction=N表示执行N次Full GC后执行内存压缩。 

    四:增量回收,完成10万request用时171秒,太慢了,配置如下 
    $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xincgc "; 
    似乎回收得也不太干净,而且也对性能有较大影响,不值得试。 

    五:并发回收的I-CMS模式,和增量回收差不多,完成10万request用时170秒。 
    $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:CMSIncrementalDutyCycle=10 -XX:-TraceClassUnloading "; 
    采用了sun推荐的参数,回收效果不好,照样有停顿,数小时之内就会频繁出现停顿,什么sun推荐的参数,照样不好使。 

    六:递增式低暂停收集器,还叫什么火车式回收,不知道属于哪个系,完成10万request用时153秒 
    $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseTrainGC "; 
    该配置效果也不好,影响性能,所以没试。 

    七:相比之下,还是并发回收比较好,性能比较高,只要能解决ParNewGC(并行回收年轻代)时的promotion failed错误就一切好办了,查了很多文章,发现引起promotion failed错误的原因是CMS来不及回收(CMS默认在年老代占到90%左右才会执行),年老代又没有足够的空间供GC把一些活的对象从年轻代移到年老代,所以执行Full GC。CMSInitiatingOccupancyFraction=70表示年老代占到约70%时就开始执行CMS,这样就不会出现Full GC了。SoftRefLRUPolicyMSPerMB这个参数也是我认为比较有用的,官方解释是softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap,我觉得没必要等1秒,所以设置成0。配置如下 
    $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -Xloggc:log/gc.log "; 
    上面这个配置内存上升的很慢,24小时之内几乎没有停顿现象,最长的只停滞了0.8s,ParNew GC每30秒左右才执行一次,每次回收约0.2秒,看来问题应该暂时解决了。 

    参数不明白的可以上网查,本人认为比较重要的几个参数是:-Xms -Xmx -Xmn MaxTenuringThreshold GCTimeRatio UseConcMarkSweepGC CMSInitiatingOccupancyFraction SoftRefLRUPolicyMSPerMB
  • JVM性能调优(转)

    2014-05-12 13:27:02

    最近因项目存在内存泄漏,故进行大规模的JVM性能调优  现把经验做一记录。

    一、JVM内存模型及垃圾收集算法

     1.根据Java虚拟机规范,JVM将内存划分为:

    • New(年轻代)
    • Tenured(年老代)
    • 永久代(Perm)

      其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。

     

    • 年轻代(New):年轻代用来存放JVM刚分配的Java对象
    • 年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代
    • 永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。

    New又分为几个部分:

    • Eden:Eden用来存放JVM刚分配的对象
    • Survivor1
    • Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured。显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。

     2.垃圾回收算法

      垃圾回收算法可以分为三类,都基于标记-清除(复制)算法:

    • Serial算法(单线程)
    • 并行算法
    • 并发算法

      JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法,关于选择细节请参考JVM调优文档。

      稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。所以,并发算法适用于交互性高的一些程序。经过观察,并发算法会减少年轻代的大小,其实就是使用了一个大的年老代,这反过来跟并行算法相比吞吐量相对较低。

      还有一个问题是,垃圾回收动作何时执行?

    • 当年轻代内存满时,会引发一次普通GC,该GC仅回收年轻代。需要强调的时,年轻代满是指Eden代满,Survivor满不会引发GC
    • 当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代
    • 当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载

      另一个问题是,何时会抛出OutOfMemoryException,并不是内存被耗空的时候才抛出

    • JVM98%的时间都花费在内存回收
    • 每次回收的内存小于2%

      满足这两个条件将触发OutOfMemoryException,这将会留给系统一个微小的间隙以做一些Down之前的操作,比如手动打印Heap Dump。

     

    二、内存泄漏及解决方法

     1.系统崩溃前的一些现象:

      • 每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,FullGC的时间也有之前的0.5s延长到4、5s
      • FullGC的次数越来越多,最频繁时隔不到1分钟就进行一次FullGC
      • 年老代的内存越来越大并且每次FullGC后年老代没有内存被释放

         之后系统会无法响应新的请求,逐渐到达OutOfMemoryError的临界值。

         

         2.生成堆的dump文件

         通过JMX的MBean生成当前的Heap信息,大小为一个3G(整个堆的大小)的hprof文件,如果没有启动JMX可以通过Java的jmap命令来生成该文件。

         

         3.分析dump文件

         下面要考虑的是如何打开这个3G的堆信息文件,显然一般的Window系统没有这么大的内存,必须借助高配置的Linux。当然我们可以借助X-Window把Linux上的图形导入到Window。我们考虑用下面几种工具打开该文件:

        1. Visual VM
        2. IBM HeapAnalyzer
        3. JDK 自带的Hprof工具

         使用这些工具时为了确保加载速度,建议设置最大内存为6G。使用后发现,这些工具都无法直观地观察到内存泄漏,Visual VM虽能观察到对象大小,但看不到调用堆栈;HeapAnalyzer虽然能看到调用堆栈,却无法正确打开一个3G的文件。因此,我们又选用了Eclipse专门的静态内存分析工具:Mat。

         

         4.分析内存泄漏

         通过Mat我们能清楚地看到,哪些对象被怀疑为内存泄漏,哪些对象占的空间最大及对象的调用关系。针对本案,在ThreadLocal中有很多的JbpmContext实例,经过调查是JBPM的Context没有关闭所致。

         另,通过Mat或JMX我们还可以分析线程状态,可以观察到线程被阻塞在哪个对象上,从而判断系统的瓶颈。

         

         5.回归问题

           Q:为什么崩溃前垃圾回收的时间越来越长?

           A:根据内存模型和垃圾回收算法,垃圾回收分两部分:内存标记、清除(复制),标记部分只要内存大小固定时间是不变的,变的是复制部分,因为每次垃圾回收都有一些回收不掉的内存,所以增加了复制量,导致时间延长。所以,垃圾回收的时间也可以作为判断内存泄漏的依据

           Q:为什么Full GC的次数越来越多?

           A:因此内存的积累,逐渐耗尽了年老代的内存,导致新对象分配没有更多的空间,从而导致频繁的垃圾回收

           Q:为什么年老代占用的内存越来越大?

           A:因为年轻代的内存无法被回收,越来越多地被Copy到年老代

        三、性能调优

         除了上述内存泄漏外,我们还发现CPU长期不足3%,系统吞吐量不够,针对8core×16G、64bit的Linux服务器来说,是严重的资源浪费。

         在CPU负载不足的同时,偶尔会有用户反映请求的时间过长,我们意识到必须对程序及JVM进行调优。从以下几个方面进行:

        • 线程池:解决用户响应时间长的问题
        • 连接池
        • JVM启动参数:调整各代的内存比例和垃圾回收算法,提高吞吐量
        • 程序算法:改进程序逻辑算法提高性能

          1.Java线程池(java.util.concurrent.ThreadPoolExecutor)

            大多数JVM6上的应用采用的线程池都是JDK自带的线程池,之所以把成熟的Java线程池进行罗嗦说明,是因为该线程池的行为与我们想象的有点出入。Java线程池有几个重要的配置参数:

        • corePoolSize:核心线程数(最新线程数)
        • maximumPoolSize:最大线程数,超过这个数量的任务会被拒绝,用户可以通过RejectedExecutionHandler接口自定义处理方式
        • keepAliveTime:线程保持活动的时间
        • workQueue:工作队列,存放执行的任务

            Java线程池需要传入一个Queue参数(workQueue)用来存放执行的任务,而对Queue的不同选择,线程池有完全不同的行为:

        • SynchronousQueue: 一个无容量的等待队列,一个线程的insert操作必须等待另一线程的remove操作,采用这个Queue线程池将会为每个任务分配一个新线程
        • LinkedBlockingQueue : 无界队列,采用该Queue,线程池将忽略 maximumPoolSize参数,仅用corePoolSize的线程处理所有的任务,未处理的任务便在LinkedBlockingQueue中排队
        • ArrayBlockingQueue: 有界队列,在有界队列和 maximumPoolSize的作用下,程序将很难被调优:更大的Queue和小的maximumPoolSize将导致CPU的低负载;小的Queue和大的池,Queue就没起动应有的作用。

            其实我们的要求很简单,希望线程池能跟连接池一样,能设置最小线程数、最大线程数,当最小数<任务<最大数时,应该分配新的线程处理;当任务>最大数时,应该等待有空闲线程再处理该任务。

            但线程池的设计思路是,任务应该放到Queue中,当Queue放不下时再考虑用新线程处理,如果Queue满且无法派生新线程,就拒绝该任务。设计导致“先放等执行”、“放不下再执行”、“拒绝不等待”。所以,根据不同的Queue参数,要提高吞吐量不能一味地增大maximumPoolSize。

            当然,要达到我们的目标,必须对线程池进行一定的封装,幸运的是ThreadPoolExecutor中留了足够的自定义接口以帮助我们达到目标。我们封装的方式是:

        • 以SynchronousQueue作为参数,使maximumPoolSize发挥作用,以防止线程被无限制的分配,同时可以通过提高maximumPoolSize来提高系统吞吐量
        • 自定义一个RejectedExecutionHandler,当线程数超过maximumPoolSize时进行处理,处理方式为隔一段时间检查线程池是否可以执行新Task,如果可以把拒绝的Task重新放入到线程池,检查的时间依赖keepAliveTime的大小。

          2.连接池(org.apache.commons.dbcp.BasicDataSource)

            在使用org.apache.commons.dbcp.BasicDataSource的时候,因为之前采用了默认配置,所以当访问量大时,通过JMX观察到很多Tomcat线程都阻塞在BasicDataSource使用的Apache ObjectPool的锁上,直接原因当时是因为BasicDataSource连接池的最大连接数设置的太小,默认的BasicDataSource配置,仅使用8个最大连接。

            我还观察到一个问题,当较长的时间不访问系统,比如2天,DB上的Mysql会断掉所以的连接,导致连接池中缓存的连接不能用。为了解决这些问题,我们充分研究了BasicDataSource,发现了一些优化的点:

        • Mysql默认支持100个链接,所以每个连接池的配置要根据集群中的机器数进行,如有2台服务器,可每个设置为60
        • initialSize:参数是一直打开的连接数
        • minEvictableIdleTimeMillis:该参数设置每个连接的空闲时间,超过这个时间连接将被关闭
        • timeBetweenEvictionRunsMillis:后台线程的运行周期,用来检测过期连接
        • maxActive:最大能分配的连接数
        • maxIdle:最大空闲数,当连接使用完毕后发现连接数大于maxIdle,连接将被直接关闭。只有initialSize < x < maxIdle的连接将被定期检测是否超期。这个参数主要用来在峰值访问时提高吞吐量。
        • initialSize是如何保持的?经过研究代码发现,BasicDataSource会关闭所有超期的连接,然后再打开initialSize数量的连接,这个特性与minEvictableIdleTimeMillis、timeBetweenEvictionRunsMillis一起保证了所有超期的initialSize连接都会被重新连接,从而避免了Mysql长时间无动作会断掉连接的问题。

          3.JVM参数

            在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标:

        • GC的时间足够的小
        • GC的次数足够的少
        • 发生Full GC的周期足够的长

          前两个目前是相悖的,要想GC时间小必须要一个更小的堆,要保证GC次数足够少,必须保证一个更大的堆,我们只能取其平衡。

           (1)针对JVM堆的设置一般,可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值
           (2)年轻代和年老代将根据默认的比例(1:2)分配堆内存,可以通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代,比如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小

           (3)年轻代和年老代设置多大才算合理?这个我问题毫无疑问是没有答案的,否则也就不会有调优。我们观察一下二者大小变化有哪些影响

        • 更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的Full GC
        • 更小的年轻代必然导致更大年老代,小的年轻代会导致普通GC很频繁,但每次的GC时间会更短;大的年老代会减少Full GC的频率
        • 如何选择应该依赖应用程序对象生命周期的分布情况:如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。但很多应用都没有这样明显的特性,在抉择时应该根据以下两点:(A)本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道理 (B)通过观察应用一段时间,看其他在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,比如可以把比例控制在1:1。但应该给年老代至少预留1/3的增长空间

          (4)在配置较好的机器上(比如多核、大内存),可以为年老代选择并行收集算法: -XX:+UseParallelOldGC ,默认为Serial收集

          (5)线程堆栈的设置:每个线程默认会开启1M的堆栈,用于存放栈帧、调用参数、局部变量等,对大多数应用而言这个默认值太了,一般256K就足用。理论上,在内存不变的情况下,减少每个线程的堆栈,可以产生更多的线程,但这实际上还受限于操作系统。

          (4)可以通过下面的参数打Heap Dump信息

        • -XX:HeapDumpPath
        • -XX:+PrintGCDetails
        • -XX:+PrintGCTimeStamps
        • -Xloggc:/usr/aaa/dump/heap_trace.txt

            通过下面参数可以控制OutOfMemoryError时打印堆的信息

        • -XX:+HeapDumpOnOutOfMemoryError

         请看一下一个时间的Java参数配置:(服务器:Linux 64Bit,8Core×16G)

         

         JAVA_OPTS="$JAVA_OPTS -server -Xms3G -Xmx3G -Xss256k -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelOldGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/aaa/dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/usr/aaa/dump/heap_trace.txt -XX:NewSize=1G -XX:MaxNewSize=1G"

        经过观察该配置非常稳定,每次普通GC的时间在10ms左右,Full GC基本不发生,或隔很长很长的时间才发生一次

        通过分析dump文件可以发现,每个1小时都会发生一次Full GC,经过多方求证,只要在JVM中开启了JMX服务,JMX将会1小时执行一次Full GC以清除引用,关于这点请参考附件文档。

         4.程序算法调优:本次不作为重点


        参考资料:

        http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

         

      1. LR7.8--11.5下载地址(转)

        2013-09-17 19:07:27

        LR7.8下载地址
        迅雷下载:http://kuai.xunlei.com/d/HhEvBQpzLQDSr.9Q05b

        旋风下载:http://urlxf.qq.com/?qMnQFn6

        电驴下载地址:ed2k://|file|LR7.8.ISO|666427392|40A7E0AE89540B347C527EA720164390|h=SL7LJYUVZ25K7G74OT2RYSN7O4T6JSW5|/


        LR7.8汉化地址
        迅雷下载:http://kuai.xunlei.com/d/HhEvBQptLQDSr.9Qc2d

        旋风下载:http://urlxf.qq.com/?yEjeeuM

        电驴下载地址:ed2k://|file|Loadrunner7.8%E6%B1%89%E5%8C%96.rar|53330573|9EBB702BC767633610F85A3ECBDEDC68|h=3AADUZJBVUFESNRS6HYS7E2JX5GRFB4Q|/






        LR8.0下载地址
        迅雷下载:http://kuai.xunlei.com/d/HhEvBQpvLQDSr.9Qc54

        旋风下载:http://urlxf.qq.com/?uQbyAjz

        电驴下载地址:ed2k://|file|Loadrunner%208.0%20(Web%20Site%20Load%20Test%20Tool%20-%20Good).iso|854347776|7618D5DD794189B5C512BCF1F47813AF|h=OKRGNEKRHZA6E2GPU2WYHW6NHPY4TYRL|/







        LR8.1下载地址
        迅雷下载:http://kuai.xunlei.com/d/HhEvBQpxLQDSr.9Q1ae

        旋风下载:http://urlxf.qq.com/?7N77baY

        电驴下载地址:ed2k://|file|LoadRunner.V8.1.iso|683960320|FF81A7941DD63981EA10E0637F43C3FB|h=VGJDMGK5DXZBSWSAXYKS7WOTOWB7T6EQ|/


        LR8.1汉化地址
        迅雷下载:http://kuai.xunlei.com/d/EPHEDEAPYUHZ

        旋风下载:http://urlxf.qq.com/?7zYJRrr

        电驴下载地址:ed2k://|file|LoadRunner.V8.1.Chinese.Pack.iso|166569984|8F8380CE8A1B6D2E2A95F97F4E0F90B3|h=UD5S3LMZMYO2KROZMDBEPEQQWSMSCYLS|/







        LR9.1下载地址

        迅雷下载:http://kuai.xunlei.com/d/EJJCHBWHGWWZ

        旋风下载:http://urlxf.qq.com/?ZvUJzei

        电驴下载地址:ed2k://|file|T7177-15005LR9.1.iso|2209112064|7A9EC82D0468B1F1167D4DF16BADF865|h=RUJYAQUFUNO3CWP6GE5TO3TK56Q6HTQY|/







        LR9.5下载地址
        迅雷下载:http://kuai.xunlei.com/d/ERYHAPHUWHOX

        旋风下载:http://urlxf.qq.com/?qY3URrq

        电驴下载地址:ed2k://|file|T7177-15008LR9.5.iso|2468904960|B541B92EBB43D87A1D4378C646D9C562|h=TKS5O3HS6C4URCRGN7BO7DWLWQQCFSG7|/

        LR9.5的补丁地址:ed2k://|file|LR951_LR952_IE8.zip|108370944|E843ED2728DEE446D18915B03242C36D|h=SF3NHBY3DJELCPTAEPQYNWTNIX6S2J5O|/

        LR9.5的补丁包括9.51、9.52和IE8的补丁







        LR11下载地址
        迅雷下载:http://kuai.xunlei.com/d/ELUKJQXCPRRP

        旋风下载:http://urlxf.qq.com/?Av2iQj2

        电驴下载地址:ed2k://|file|loadrunner-11.iso|4313382912|B95AFEB3A879C6B8146435BB79E8CB97|h=NTUPKAXX5LTZWOVGDKV7UEXJ7UKAL5HU|/


        LR11汉化地址
        迅雷下载:http://kuai.xunlei.com/d/EHRXNVSKIQTA

        旋风下载:http://urlxf.qq.com/?UNNRNzE

        电驴下载地址:ed2k://|file|Software,_HP_LoadRunner_11.00_Sim_Chinese_T7177-15016.iso|137336832|03A8913420E2824C930A7DD5E57F6B4C|h=6DOODOES7KDYCPZPBF6DZVXAQ3DADYZL|/

        LR11的补丁地址:http://kuai.xunlei.com/d/EYBXHVEBWLBQ

        电驴下载地址:

        ed2k://|file|Software_LoadRunner_11.00_Patch_1_T7177_15018.zip|154780328|B7758781DFB7CA5CFDD4CA52D5253330|h=RL7WSANUFX2ARJJEHECUA55WNPNTXDWK|/

        ed2k://|file|HP_LoadRunner_11.00_Patch_2.zip|167135729|F4A2E399D7F6B078F684A2017DC3EC1C|h=24I6PDFK66YRJNKFB7NEWHGHKNHAEMYU|/

        ed2k://|file|LoadRunner11_Path3.zip|185616333|69D83917289FD12EEB6DD98DAD1D2587|h=DVNA2AESPPGZ7NVJJZDUPNQTNBSU3AJJ|/

        ed2k://|file|LR_03105%20-%20LoadRunner%2011.00%20Patch%204%20Critical%20Update.zip|164942928|46C118AB66886C91E69E1712243505C3|h=CPSPVAMHQBDJ2V4UEE7IGZSTBULZD4U6|/


        LR11补丁论坛下载地址:http://bbs.51testing.com/viewthread.php?tid=450223&extra=page%3D2%26amp%3Borderby%3Dheats%26amp%3Bfilter%3D2592000


        LR11第4个补丁包http://bbs.51testing.com/thread-533197-1-1.html



        LR11.5和官方汉化包下载地址:
        http://bbs.51testing.com/thread-883438-1-1.html


        有的人下载了,没有虚拟光驱,还需要解压,顺便给个虚拟光驱吧,就几百K,特别好用  魔方虚拟光驱.zip (385.46 KB) 




        共享2本书 
        性能测试进阶指南-Loadrunner9.1实战  下载地址:

        ed2k://|file|%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E8%BF%9B%E9%98%B6%E6%8C%87%E5%8D%97%EF%BC%9ALOADRUNNER_9.1%E5%AE%9E%E6%88%98.pdf|56580229|E713F005534EC64A469C9C3A0C0794EA|h=7PJ7UFXUUSGVX5ISTWDNOWRURIEGAQXX|/


        捉虫记 大容量Web应用性能测试与loadrunner实战:

        ed2k://|file|%E6%8D%89%E8%99%AB%E8%AE%B0%20%E5%A4%A7%E5%AE%B9%E9%87%8FWeb%E5%BA%94%E7%94%A8%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E4%B8%8ELoadRunner%E5%AE%9E%E6%88%98.pdf|53491027|14F6EB01F97E30328B13A2359E0E30A1|h=YDCJTYMD6YKLZM54EB4NEFOQ4LPWAGPY|/


        [/hide]
        性能测试进阶指南——Loadrunner11实战光盘下载地址http://bbs.51testing.com/thread-684996-1-1.html

      2. LR11.5下载地址

        2013-07-26 14:23:34

        LR11第4个补丁包http://bbs.51testing.com/thread-533197-1-1.html



        LR11.5和官方汉化包下载地址:
        http://bbs.51testing.com/thread-883438-1-1.html




        共享2本书 
        性能测试进阶指南-Loadrunner9.1实战  下载地址:

        ed2k://|file|%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E8%BF%9B%E9%98%B6%E6%8C%87%E5%8D%97%EF%BC%9ALOADRUNNER_9.1%E5%AE%9E%E6%88%98.pdf|56580229|E713F005534EC64A469C9C3A0C0794EA|h=7PJ7UFXUUSGVX5ISTWDNOWRURIEGAQXX|/


        捉虫记 大容量Web应用性能测试与loadrunner实战:

        ed2k://|file|%E6%8D%89%E8%99%AB%E8%AE%B0%20%E5%A4%A7%E5%AE%B9%E9%87%8FWeb%E5%BA%94%E7%94%A8%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E4%B8%8ELoadRunner%E5%AE%9E%E6%88%98.pdf|53491027|14F6EB01F97E30328B13A2359E0E30A1|h=YDCJTYMD6YKLZM54EB4NEFOQ4LPWAGPY|/


        [/hide]
        性能测试进阶指南——Loadrunner11实战光盘下载地址http://bbs.51testing.com/thread-684996-1-1.html

      3. Win7 64位 + LoadRunner 11录制时弹不出IE的解决办法

        2013-07-12 08:59:51

        Win7 64位 + LoadRunner 11录制时弹不出IE的解决办法

        1. 卸载IE9
        装了Win7 64位后,默认的IE是IE9,先把IE9卸载。打开控制面板->程序->查看已经安装的更新,找到IE9卸载,重启。卸载后,IE自动变为IE8。其中存在C:\Program Files\Internet Explorer下面的是64位的IE,存在C:\Program Files(x86)\Internet Explorer下面的是32位的IE。

        2. 配置IE8
        打开Internet选项->高级,把“启用第三方浏览器扩展”去掉。重启IE生效。
        在LR中开始录制页面,Program to record里选Microsoft Internet Explorer。这里指向的IE实际上是32位的IE。开始录制,发现还弹不出页面。后来等了好几分钟弹出来了,也开始有event了。才发现原来不是弹不出来,是弹出的太慢了。在网上找到了有效的解决办法。打开Internet选项->连接->局域网设置,把“自动检测设置”去掉。搞定!

        另外,HP给的安装文档中说64位不支持vgen,是不对的。在以上环境中录制没有问题。
        本人还试过32位XP+LR11+IE7,也运行正常。
        如果实在IE弹不出来,就用Firefox吧。这个成功概率很高。
      4. 测试小生教学视频

        2012-05-10 08:36:07

        测试小生作品:LoadRunner快速实战 - 1 脚本录制
        http://www.boobooke.com/v/bbk2074 
        测试小生作品:LoadRunner快速实战 - 2 场景设计,性能指标添加分析
        http://www.boobooke.com/v/bbk2075 
        测试小生作品:LoadRunner快速实战 - 3 性能报告结果分析
        http://www.boobooke.com/v/bbk2076 
        测试小生作品:中级篇3.4 开源性能测试工具JMeterTomcat监视器 - Apache服务器性能监控测试计划
        http://www.boobooke.com/v/bbk2172
        测试小生作品:开源性能测试工具JMeter之实战1
        http://www.boobooke.com/v/bbk2186
        测试小生作品:性能测试工具JMeter之初级篇 1 - 搭建WEB测试环境
        http://www.boobooke.com/v/bbk2107 
        测试小生作品:开源性能测试工具JMeterMySQL - 初级2-1 JDBC连接数据库
        http://www.boobooke.com/v/bbk2108 
        JMeter
        初级2-1 JDBC连接数据 - 初级2.2 测试环境搭建MYsql Jcreator安装
        http://www.boobooke.com/v/bbk2128 
        测试小生作品:开源性能测试工具JMeter之测试MySQL 初级2.3 MYSQL数据库的性能测试
        http://www.boobooke.com/v/bbk2129 
        测试小生作品:性能测试工具Badboy介绍

      5. 小强老师视频

        2012-05-10 08:35:07


        性能测试常见用语-性能测试基本概念剖析
        http://www.boobooke.com/v/bbk1577  
        1. lr
        目录分析
        http://www.boobooke.com/v/bbk1574 
        2.1 lr
        界面分析
        http://www.boobooke.com/v/bbk1735 
        2.2 lr
        界面分析
        http://www.boobooke.com/v/bbk1736 
        2.3 lr
        界面分析
        http://www.boobooke.com/v/bbk1737 
        3 lr
        常用术语
        http://www.boobooke.com/v/bbk1620  
        4. hp web tours
        分析
        http://www.boobooke.com/v/bbk1762 
        5 lr
        录制测试脚本
        http://www.boobooke.com/v/bbk1763 
        6. lr
        回放测试脚本
        http://www.boobooke.com/v/bbk1764 
        7. HTML
        URL比较
        http://www.boobooke.com/v/bbk1771 
        8. lr
        自动关联
        http://www.boobooke.com/v/bbk1778 
        9. lr
        测试脚本的增强方法
        http://www.boobooke.com/v/bbk1772 
        10. run time settings
        http://www.boobooke.com/v/bbk1782 
        11. lr
        脚本编写实践过程
        http://www.boobooke.com/v/bbk1781 
        小强作品:12 错误处理
        http://www.boobooke.com/v/bbk1776 
        小强作品:13 脚本调试
        http://www.boobooke.com/v/bbk1777 
        小强作品:14 java虚拟用户
        http://www.boobooke.com/v/bbk1901 
        小强作品:15 调用dll
        http://www.boobooke.com/v/bbk1900 
        小强作品:16 lr录制sql脚本
        http://www.boobooke.com/v/bbk1526 
        小强作品: HP Web Tour网站介绍
        http://www.boobooke.com/v/bbk1762
        小强作品:LoadRunner常用术语介绍
        http://www.boobooke.com/v/bbk1620
        小强作品:LoadRunnerPortmapping技术
        http://www.boobooke.com/v/bbk2163
        小强作品:性能分析基础知识
        http://www.boobooke.com/v/bbk2162
        小强作品: LoadRunner结果分析
        http://www.boobooke.com/v/bbk2144
        小强作品: LoadRunner之面向目标场景
        http://www.boobooke.com/v/bbk2168
        小强作品: LoadRunner之第一部分基础知识完结篇
        http://www.boobooke.com/v/bbk2201

        小强作品:Loadrunner再谈
        http://www.boobooke.com/v/bbk3510
        小强作品:LoadRunner编程实践, 自定义监控程序
        http://www.boobooke.com/v/bbk3585 
        小强作品:LoadRunner编程实践函数妙用(1)
        http://www.boobooke.com/v/bbk3584 
        小强作品:LAMP全程实战之在线商店项目实战 -15
        http://www.boobooke.com/v/bbk2476 
        小强作品:性能测试与调优概览
        http://www.boobooke.com/v/bbk3511 
        小强作品:Loadrunner编程 return 0的私密
        http://www.boobooke.com/v/bbk3429 
        小强作品:Loadrunner编程之参数
        http://www.boobooke.com/v/bbk3430 
        小强作品:Load Runner 编程实践 结构体
        http://www.boobooke.com/v/bbk2993 
        小强作品:Load Runner 8.0 Student Workbook介绍
        http://www.boobooke.com/v/bbk2991 
        小强作品:常用软件和工具杂谈
        http://www.boobooke.com/v/bbk2974 
        小强作品:LoadRunnerJMeter杂谈

        http://www.boobooke.com/v/bbk2312  


      6. 小布老师视频

        2012-05-10 08:28:21

        小布老师视频:
        测试工具概述,兼LoadRunner介绍 -1-4
        http://www.boobooke.com/v/bbk1046
        http://www.boobooke.com/v/bbk1047
        http://www.boobooke.com/v/bbk1048
        小布老师视频 - 在LoadRunner中使用动态库技术
        http://www.boobooke.com/v/bbk1049
        测试工具概述,兼LoadRunner介绍 -1-4
        http://www.boobooke.com/v/bbk1055  -- 更新与2011-04-20th
        LR系列培训视频  - LoadRunner概述(上下)
        http://www.boobooke.com/v/bbk1059
        http://www.boobooke.com/v/bbk1060
        LR系列培训视频  - LoadRunner安装
        http://www.boobooke.com/v/bbk1061
        LR系列培训视频  - 录制和回放测试脚本(1-3)
        http://www.boobooke.com/v/bbk1063
        http://www.boobooke.com/v/bbk1064
        http://www.boobooke.com/v/bbk1065
        LR系列培训视频 - LoadRunner测试Tuxedo应用系统 1-4
        http://www.boobooke.com/v/bbk1067
        http://www.boobooke.com/v/bbk1068
        http://www.boobooke.com/v/bbk1071
        http://www.boobooke.com/v/bbk1072

        开源性能测试工具Curl-Loader快速实战 - 1
        http://www.boobooke.com/v/bbk1808
        开源性能测试工具Curl-Loader快速实战 - 2
        http://www.boobooke.com/v/bbk1809
        开源性能测试工具Curl-Loader快速实战 - 3
        http://www.boobooke.com/v/bbk1835
        开源性能测试工具Curl-Loader快速实战 - 4
        http://www.boobooke.com/v/bbk1836
        使用LoadRunner测试Oracle实例研究 - 1
        http://www.boobooke.com/v/bbk2159
        使用LoadRunner测试Oracle实例研究 - 2
        http://www.boobooke.com/v/bbk2170
        使用LoadRunner测试Oracle实例研究 - 3
        http://www.boobooke.com/v/bbk2171


      7. LR 26697 错误 官方解决办法

        2011-11-23 12:19:16

        官方解决办法
        Message Code 26697 
        Missing CR/LF after body/trailer ("Transfer-Encoding: chunked") for 'URL' 

        The script. probably specifies web_add_header( "Accept?Encoding", "chunked") and/or web_add_auto_header( "Accept?Encoding", "chunked"). The server responded by sending a message with a response header "Transfer?Encoding: chunked" and response body structured accordingly. The structure of the body returned from the server seems to be invalid. 

        Troubleshooting 
        Look in the script. for web_add_header( "Accept?Encoding", "chunked") and/or web_add_auto_header( "Accept?Encoding", "chunked"), and comment out or remove these lines.
      8. LR 常见问题解决

        2011-11-17 15:37:59

         

        1.lr_think_time默认是没有启用的。所以我们在执行测试或在回放的时候启用它。具体操作为:Vugen--Vuser---Runtime-settings-----thinktime-----》选中Replay thinktime,其他设置根据实际需要。
        关于thinktime的一个详细的介绍和用法,见:http://www.testage.net/html/19/n-155019.html
        2.
        设置Rendezvous的时间。

           
        Controller中,Scenarioc菜单-----Rendezvous 进入就可看到目前脚本中的各个集合点,选中一个,然后点击“Policy”进入后,就可以设置集合点的属性,Rendezvous默认为30秒,可以重新设置成自己期望的值。

        3.Step download timeout(sec)
        设置。

           
        这个默认是120秒,但是经常我们要设置的更大一些,具体设置方法:Vugen--Vuser---Runtime-settings----Preferences------option,将Step download timeout(sec)默认值120s改为自己需要的值,其次要改变HTTP-reguest connnect timeoutsec)和HTTP-reguest receive timeoutsec)也为相应的值。

        4.
        修改本机tcp连接数。

           
        因为个人pc机的默认的tcp连接数只有15个(xp),所以我们在模拟虚拟多个用户时,就会遇到tcp的连接限制,从而报错。修改的方法:windows下运行 Patch.exe
        输入C,再输入你要的TCP/IP连接数字(一般为5002000)回车确认
        输入Y 回车确认。
        倒计时15秒后结束。
        接着再运行下Patch.exe,看连接数是不是由原来的10变成自己改了的数值。
        Patch.exe
        下载地址:http://www.touchboy.cn/2007/05/% ... %E6%8E%A5%E6%95%B0/

        6.
        LR中报WSA_IO_pending的解析和解决

        Message Code 27740
        Overlapped transmission of request to '%1' for URL 'URL' failed.

        The transmission of data to the server failed. It could be a network, router, or server problem. The word Overlapped refers to the way LoadRunner sends data in order to get a Web Page Breakdown.

        Troubleshooting
        Add the following statement to the beginning of the script. to disable the breakdown of the "First Buffer" into server and network time: web_set_sockets_option("OVERLAPPED_SEND", "0");

        在代码最前面 加代码

        web_set_sockets_option("OVERLAPPED_SEND", "0");

        7.
        关于Error -27791: Error -27790:Error -27740:错误的解决方法:

        错误如下:
        Action.c(198): Error -27791: Server "www.zcpx.cn" has shut down the connection prematurely
        Action.c(198): Error -27790: Failed to read data from server "www.zcpx.cn": [10053] Software caused connection
        abort
        Action.c(198): Error -27740: Overlapped transmission of request to "www.zcpx.cn" for URL

        "http://www.zcpx.cn/userEntry.do" failed: WSA_IO_PENDING

        解决办法:
        在脚本的最前面加上web_set_sockets_option("OVERLAPPED","0");

        8.LR
        中错误代号为27796的一个解决方法

        问题:
        曾经遇到过一个问题,在一次性能测试过程中,使用http协议的多用户向服务器发送请求。设置了持续时间,出现错误为:27796, Failed to connect to server 'hostname';port_ld': 'reason'.10048

        分析
        因为负载生成器的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载生成器的机器的端口在没有timeout之前就全部占满了。在全部占满后,就会出现上面的错误。执行netstat –na命令,可以看到打开了很多端口。所以就调整TCPtime out。即在最后一个端口还没有用到时,前面已经有端口在释放了。

        成功的解决方法:
        在负载生成器的注册表

        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里,有如下两个键值:
        TcpTimedWaitDelay
        MaxUserPort
        1,
        这里的TcpTimedWaitDelay默认值应该中是30s,所以这里,把这个值调小为5s(按需要调整)。
        2,
        也可以把MaxUserPort调大(如果这个值不是最大值的话)。
        反复验证,问题解决。

      9. Loadrunner监控windows服务器设置

        2011-11-10 12:56:07

         Loadrunner在监控windows服务器时,有时候出现连接不上的情况。
        下面是针对这些情况的一些解决方法:
        先输入net use命令,如果提示命令成功完成,则OK,否则按以下提示设置。
         net use命令举例:打开cmd后输入
        C:/Documents and Settings/Administrator>net use //127.0.0.1/ipc$ "pwd"
         /user:"username"
                1)确认访问服务器时是administrator身份。
                 
        确认方法:管理工具 -> 本地安全策略 ->安全选项 -> "网络访问:本地帐户的共享和安全模式")。如果是“仅来宾”方式则将其修改为“经典"方式,这样就可以使用Administrator身份访问被监控的服务器
                2)进入被监控服务器的windows系统, 开始—运行 中输入 services.msc,启动 Remote Procedure Call(RPC) 和Remote Registry Service这两个服务 。
                3)登录被监控的WINDOWS服务器上:右键单击我的电脑,选择管理->共享文件夹->共享 看看这里有没有C$这个共享文件夹 (要是没有的话可以自己手动加上)。
      10. loadrunner监控指标与指标分析(内存篇)

        2011-11-10 12:54:37

        从实际工作中,我们可以选取几个主要的内存指标做监控:
        1.Page/sec    程序向虚拟内存读和写数据页面的数目
        2.
         Available Mbytes 指计算机运行进程的可用物理内存大小
        3.
         Page Reads/sec  程序读取虚拟内存的次数
        4.Page Input/sec    程序读取虚拟内存每秒获得的页面数目
        5.Page Faults/sec   每秒钟出错页面的平均数量(硬页面错误和软页面错误之和)
        6.Private Bytes       当前进程占有的字节数
        7.Pool Nonpaged Bytes 指非分页池中的字节数

        如何分析这几个指标,可以按照以下判断
        1.  Page/sec 的值 <100, 正常 
        2.  
        Available Mbytes>4, 正常 
        3.  
        Page Reads/sec<5, 正常 
        4. Page Input/sec<10,正常
        5. Page Input/sec与Page Faults/sec之比<50%,正常
        6.内存泄漏:Pool Nonpaged Bytes和 Private Bytes 持续增高
      11. 软件测试工具LoadRunner常见问题整理

        2011-11-09 18:20:05

          1. 重装系统后安装LR,提示setup has determined that a previous installation has not completed,重启无效 ;

          解决办法:1)进入注册表:运行/regedit;

          2)进入路径:KEY_LOCAL_MACHINE/SYSTEM/Contrl/SessionManager;

          3)在Session Manager右侧的主试图中,双击PendingRenameOperations,在弹出的窗口中,将临时文件删除。

          4)重新运行LR安装文件即可。

          2. 安装LR,提示Command Line Option Syntax error.Type Command/?时:

          解决办法:将安装文件放在英文目录下即可;(或直接放在盘的根目录下即可)

          3. LoadRunner录制脚本经常遇到不能打开浏览器的情况,(当一台主机上安装多个浏览器时,)可以用下面的方法来解决。

          解决办法:启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可;

          提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。

          4. 录制Web脚本时,生成的脚本中存在乱码该如何解决?

          解决办法:1)新建脚本--->选择协议(Http)-->选项-->高级-->选择“支持字符集”并点选“UTF-8”;

          2)在回放脚本之前:Vuser-->运行时设置-->浏览器-->浏览器仿真-->更改-->使用浏览器-->语言下来选择 “中文(中国)”;

          进行如上设置以后即可。

          5. 录制脚本时出现IE运行错误

          原因:一般是操作系统的环境不适合或者浏览器的版本有出入。

          1.LoadRunner能支持Standalone的IE7脚本录制,在XPSP2+IE7上验证通过;

          2.LoadRunner不兼容windows vista,vugen.exe(Mercury Virtual User Generator)启动失败,错误提示"Action",跟UAC安全特性无关,初步分析跟当前用户的Temp路径改变有关;

          3.Windows 2003 SP2上无法录制IE6/7,导致IE Crash,iedw.exe(IE Crash Detection)报告错误事件,错误代码0xc0000005,ie在地址00CD4548 push 1Ah段中断。初步分析原因是Windows Server默认对IE加载DEP(数据执行保护)特性,而Vugen.exe刚好又跟DEP冲突。

          解决方案(WIN2003环境):不想换系统那就按下面操作:Control Panel->System -> "Advanced" tab->Performance section "Settings" button ->"Data Execution Prevention" tab->add the client program(vugen.exe) in "Turn on DEP for all programs and services except those I select" or choose "Turn on DEP for essential windows programs and services only." and a reboot is required. (控制面板--系统--高级--性能--数据执行保护--添加例外程序vugen.exe,或许选择第一个选项)

          6.HTML-based script与URL-based script的脚本有什么区别?

          解决办法: 使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用“URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。

          通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。

          7. 为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?

          解决办法:由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。

          进入“Run-time Setting”对话框,依次进入“Internet Protocol→Preferences”,勾选Checks下的“Enable Image and text check”选项即可。

          检查执行结果时推荐使用web_reg_find方法。

          8. 运行时的Pacing设置主要影响什么?

          解决办法:Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。

          根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。

          9. 运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?

          解决办法:Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。

          10. LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“Error:server returned an incorrectly formatted SOAP response”。这时说明原因引起的?

          造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为,因此会有上面的错误提示。

          解决方法:把“LR80WebservicesFPI_setup.exe”和“lrunner_web_sevices_path_1.exe”两个补丁打上即可解决。

          11. VuGen支持Netscape的客户证书吗?

          解决办法:不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。

          12. VuGen会修改录制浏览器中的代理服务器设置吗?

          解决办法:会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。

          13. 在LoadRunner脚本如何输出当前系统时间?

          解决办法:LoadRunner提供了char *ctime(const time_t *time)函数,调用参数为一个Long型的整数指针,用于存放返回时间的数值表示。

          调用语句与返回值如下示例:

          typedef long time_t;

          Action()

          {

          time_t t;

          lr_message(“Time in seconds since 1/1/70: %ld\n”,time(&t));

          lr_message(“System time and date: %s”,ctime(&t));

          }

          输出结果为:

          Time in seconds since 1/1/70: 1185329968

          System time and date:Wed Jul 25 10:19:28 2007

          14 .一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?

          解决办法:这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,则用户登录信息将一并清除,因此迭代时可能会发生错误。

          15 .虚拟客户脚本“Run-time Setting”中的线程和进程运行方式的区别?

          解决办法:  如果选择“Run Vuser as a process”,则场景运行时会为每一个虚拟用户创建一个进程;选择“Run Vuser as a thread”则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选项。

          另外,如果启用了IP欺骗功能,则先在Controller中选中Tools菜单下的“Expert Mode”,然后将Tools菜单下的“Options>General”标签页中的IP地址分配方式也设置为与Vuser运行方式一致,同为线程或进程方式。

          16 .在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?

          解决办法:这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。

          进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。

          17 .为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?

          在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。

          (1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:System\CurrentControlSet\Control\Session Manager\SubSystems。

          (2)找到Windows关键字,Windows关键字如下所示:

          %SystemRoot%\system32\csrss.exe bjectDirectory=\Windows

          SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1

          ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2

          ProfileControl=Off MaxRequestThreads=16

          SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。

          (3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。

          通过对注册表的更改,系统将允许运行更多的线程,因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。

          18. 录制脚本后,切换到树视图中,打开相应的脚本页面。在右侧的PageView中录制的脚本呈现中文版式,但是当切换到Server Response中,所有的中文全部换成的乱码?

          解决办法: 问题不在LR本身!被测系统的Web.config文件,在。。。。。节加入后再次录制脚本,乱码变中文。即可解决。

      291/212>
      Open Toolbar