资讯详情

LR总结笔记(三)

负载试验、压力试验、配置试验、并发试验、可靠性试验、基准试验 P3 P4 系统资源监控 windows: 1.使用loadrunner直接监控,但C盘必须能够访问LR的Monitors下面有Add Measurements可添加度量 2.使用性能工具:在计算机管理中,可以查看性能监控工具。 Windows性能日志

Windows Server 2008年引入了数据收集器集和报告。数据收集器集可以指定要跟踪的性能对象和计数器集。

多个性能计数器和跟踪日志个性能计数器和跟踪日志:

(1)指定访问控制,管理谁能访问收集到的数据。

(2)为监控创建多个执行计划和停止条件。

(3)使用数据管理器控制收集到的数据和报告的大小。

(4)根据收集到的数据生成报告。 性能-数据收集器-用户定义-右键创建新数据收集器-选择手动创建-选择创建数据日志-选择性能计数器-添加计数器-设置秒或其他保存位置的时间间隔单元systemdrive%\PerfLogs\Admin\Sql性能监视器-选择保存和关闭-找到新创建的集合,有一个数据收集器,右键属性——从日志格式列表中选择逗号分离——找到刚创建的集,右键属性——在计划选项卡上添加监控计划,然后结束设置。 三个内存指标:Available Bytes(可用,不小), Memory pages(磁盘读写硬页错误,不高),Page Faults(出错页面的平均数,不高) 内存泄漏:1。内存分配过程后,内存没有回收,过程越来越大。2.观察内存分配池Pool Paged Bytes,内存消耗在内存分配池中不断增加。

磁盘四个指标:%Disk Time(忙于读写请求服务的时间百分比,<10),Averge Disk Queue Length(平均队列,<0.5),Averge Disk Seconds/Read/Write(平均读写,无,但分寻道,旋转延迟,数据传输)

CPU三个指标:%ProcessorTime(使用率<85,user进程 system进程),%UserTime(user进程),%PrivilegedTime(system进程)

linux 1.命令监控 CPU三个指标就绪态、等待态(阻塞态)三个指标.CPU队列 2.CPU繁忙程度 3. CPU高密集程序

CPU队列、CPU繁忙程度命令:vmstat 2 10 隔2秒 采集10次 r 可操作内核线程的平均数据不得大于CPU的数目 b VMM虚拟内存等待队列中内核线程的平均值 <核数*0.7 2盒小于1.4 cs 上下文每秒切换次数 us和sy和id 是cpu用户、系统流程和空闲比( <15)

CPU高密度程序命令:ps -au 进程 au从高到低排列 ef从低到高排序

内存SWAP(使用虚拟内存块)Buffers(temp文件读取) 命令:vmstat 2 10 隔2秒 采集10次 buffer越少越好,cache越多越好。si input,so output比例应是0,比例应该是0。SWAP调虚拟内存

查看统计信息命令:vmstat -s

查看更详细的信息命令:ps -v RSS进程大小

磁盘三个指标:物理转对应多个逻辑转,逻辑转对应多个文件系统,文件系统对应挂载点, 命令:iostat 5 2 隔5秒 采集2次 sda是逻辑转

命令:如未安装sysstat包 rpm -ivh systat-7.0.2-3.el5.i386 包括iostat、mpstat、sar和sa工具 sar -d 3 3 Avwait是队列长度

测试当时磁盘的空载和负载读写情况,命令: 写入:time dd if=/dev/zero of=/test.dbf bs=8k count=30000 读取:tiem dd if=/dev/sda1 of=/dev/null bs=8k count=30000 读写:tiem dd if=/dev/sda1 of=/test1.dbf bs=8k count=30000

监控网络使用工具

2.nmon监控可以记录并撰写报告 安装nmon后 更改权限为chmod 777 文件夹

Web 服务监控 Apache 需要打开LoadHodule status_module modules/mod_status.so打开监控模式

在地址栏输入http://localhost/server-status Total accesses:总请求数 Srv PID Acc M SS Req Conn Child Slot Client VHost Request PID 进程 Req 请求数 Conn 连接数 Child 孩子间接 Request 请求方式 M您可以查看以下注释 带参数输入url:?auto动态刷新,refresh刷新秒 如:http://localhost/server-status?auto&refresh=5 Total Accesses:总连接量 Total kBytes:接受总字 Uptime:运行总时间 ReqPerSec:平均每秒请求数 BytesPerSec:平均每秒发送的字节数 BytesPerReq:平均每个请求发送的字节 BusyWorkers:工作数(线程) IdleWorkers:空闲数(线程)

运行时的配置: 1.AllowOverride是否允许覆盖通常是None 2.HostnameLookups 主机对DNS搜索,一般是off 3.FollowSymLinks 可设置连接符的安全性是否重复检查 <Directory> Options FollowSymLinks </Directory> <Directory/www/htdocs> Options-FollowSymLinks SymLinksIfOwnerMatch </Directory> 4.内容协商Content Negotiation

多路模块处理 windows:mpm_winnt linux:preforkMPM\workerMPM ThreadsPerChild 每个孩子的进程数 最大的是1920,建议在100-500之间 MaxRequestsPerChild 默认为0,建议值超过1。 MaxSpareServers 自动为MaxSpareServers 1,建议比MinSpareServers,如果系统很忙,这个参数就会启动,多余的就会被杀死。 ServerLimit要比MaxClient大

测试时去掉ExtendedStatus On和LoadHodule status_module modules/mod_status.so两个模块加#两个模块

但是tomcat不涉及!

数据库监控: 数据库内外压力内存瓶颈: CPU瓶颈: 磁盘瓶颈: 等待类型:1.丢失更新 两个数据同时更新一个数据,结果更新的数据不是两个数据的总和 2.脏读 一个数据,一个人的数据恢复到原始数据,另一个人使用了新数据。 3.不能重复阅读 被读取永远不是最新的,因为数据一直在更新。 4.幻影 一个插入或删除数据,在另一个相关表中没有相同的插入或删除数据,导致其中一个多出数据。

使用软件监控数据库 可以捕捉阻塞时间,如何处理数据库,捕捉死,索引,少使用堆表,索引维护

查看windows端口并关闭过程:

netstat -aon|findstr "49157" //可查看49157端口,然后打开任务管理器选项栏查看PID的情况。

查看linux端口并关闭过程:

netstat -ntlp////检查所有流程的端口号

lsof -i:8000///查看8000端口号

netstat -tunlp |grep 8000///查看8000端口

kill -s 9 2481//关闭PID为2481的进程

性能:消耗时间和资源利用率 性能高:时间少,资源利用低 容量:空间相同,容量大,有利 接口测试越来越重要,智能调用各种模块 httpwatch测试前端性能 virtualUser虚拟用户 单交易基准测试:按规定测试 单交易负载测试:从需求开始,最大负载可以承受 100个 200个 1个小时 单交易压力测试:从需求出发,系统在极限情况下会崩溃,是否有100个自我恢复 有多少时会有问题 综合交易测试: 综合基准测试: 稳定性试验:可靠性试验,平均无故障时间越长,修复时间越短越好。 性能测试:特定负载条件下的性能指标数据。 不加think time接收压力大 取消计算性能think time PV可以根据访问次数刷, IP访问,按照IP计算 吞吐量KB:在比较和评估测试中,单位时间接收请求后返回的数量Tomcat比Weblogic

性能需求: 功能点:一笔交易有多个功能 业务:一笔交易是一笔业务 交易:服务事件 1.并发数 2.用户使用频繁或大量用户 3.熟悉被测对象是否需要填充 性能测试不进行异常分析和测试 熟悉架构,熟悉网络部署

性能分析: 1.分析被测对象的业务规模 注册1W,交易数800左右,峰值交易时间段20分钟完成400左右,峰值并发30 2.分析试点 a、注册 根据业务规模分析,每天的交易量约为800,这意味着至少有800录,系统存在号,测试1W,分解每天。另外,用2、8分析时间内最高访问量,集中发生的时间。 b、登录 某个时间点完成400次交易,单次登录消耗的时间?要求不超过3s c、订票 d、查询 3.确定对应指标

并发数: 查询峰值得到并发数:使用SQL,使用count函数,datepass。 根据业务量计算并发数:10个注册成功案例,2分钟做完,需要几个人,一个用户消耗60s时间 HttpWatch打开后进行时间统计,利用loadrunner计算时间, 几个人就是并发数。 启动Server,如果报错可以陪着config hp\laodrunner\webtours\conf\httpd.conf的#ServerName localhost:1080的#去掉,再启动服务 可以用HttpWatch计算登录时间,或者使用loadrunning计算 启动Virtual User Generator.exe 打开create a new script 打开web-http/html

打开首页,输入,提交,退出。

open_index submit_login sign_off

create a new script action deleting the default action click the recording button setting the content of the URL address strat recording switch the action when the recording is completed operating browser close the recording when all operations are done  Modify think time seconds replay test actioning think time and wasted time click test results select expand all modify session:

单次登录11s

日均200WPV 200*80%=160W 24小时*20%=4.8小时 单次登录2s 一个用户4.8*3600s/2=8640次

测试4.8小时能否完成160W以上请求。 =================================================== 系统要求5分钟(300s)内完成200次用户注册,响应时间不超过3s,成功率100%,cpu以及内存使用率不超过70% 单次注册消耗时间10.86s

open_index into_register submit_register

300s/10.86=27次 200次/27次=8个Vuser 8*27次=216个测试数据 216*1.2倍=260个测试数据

准备测试数据

响应时间:服务器处理时间(经验值2,5,8,10)2秒最好 ================================================== #define定义常量 #define COUNT 100 Action()

函数: int sum(a,b){   int x,y,z;   x = a;   y = b;   z = x + y;   return z; } Action(){   lr_output_message("%d",sum(20,30));   return 0; }

条件: Acton(){   int random;   random = rand()%3 + 1;//1,2,3随机   switch (random){     case 1:       lr_output_message();break;     case 2:       lr_output_message();break;     default:       lr_output_message();   } }

循环: Acton(){   int i = 1, sum = 0;   int count;   do {     sum = sum + i;     i++; //  count = i;   }while(i<=10); //  lr_output_message("%d",count);     lr_output_message("%d",sum);     return 0; }

可以用字符数组表示字符串char test[] = "afasdfd"; 指针:变量的地址。 指针变量:专门存放变量地址的变量。int *p1,*p2;float *q; &取地址符号(p1 = &i),*p1取指针变量的内容。

如果使用一个脚本创建100个账户,可以迭代100次。也可以使用10个虚拟用户,每个用户创建10个账户。但是要设置parameter 里面unique并且设置Allocate Vuser values in the Controller为 Allocate 10 values for each Vuser。

参数Unique Number:当选择%03d,查看sample为001,block是数据块的意思,如果输入10就是001-010个数字也就是一个虚拟用户使用10个数字。另外使用拼接,可以"t{username}"。这样就是少一些参数输入。

============================================= lr_output_message("第一次:%s",lr_eval_string("{paramtest}")); lr_output_message("第二次:%s",lr_eval_string("{paramtest}")); ============================================= 增加检查点:需要点击Snapshot界面,选择Honzontal下的Recording,同时选择Page View下的要检查的部分右键选择Add Text Check Step,进入Find Text界面选择Save count复选框并在后面填写标志位regsiterflag。 在代码内添加Replace with Parameter,只需要右键选择对应几个字母,即可参数化之前设置好的参数。 命一个int regsitercount=0; 然后regsitercount = atoi(lr_eval_string("{regsiterflag}")); if(regsitercount>0)lr_output_message("success");else "fail + %s",lr_eval_string("{username}"); 检查点中的Add Text Check Step,如果在Page View下右键找到有可能不是真正要检查的字符。需要进入Http Data下的对应请求的Raw Data内HTML页面代码,找到对应的正确代码才可以。 ============================================== 关联函数: 查看前台页面代码,可以看到name="userSession"。 定位提交表单的页面右键,点击属性,可以查看对应的url,变然后查看Http Data,就可以查看到userSession的位置。 web_reg_save_param ============================================== open_index submit_login into_flight find_flight select-flight pay_flight sign_off 账户需参数化,username和userSession。出发到达城市随机。随机某个具体航班。 如果成功,还要测试失败是否也生效,代表是否正确的代码。 web_reg_save_param("usersession","LB=userSession\" value=\"","RB=\"/>",LAST); web_reg_find("Text=Welcome","SaveCount=loginflag",LAST); if(atoi(lr_eval_string("{loginflag}"))>0)//lr_eval_string转字符串,atoi转int lr("success"); return 0; else lr("fail"); return -1;

web_reg_save_param("flights","LB=\">","RB=</option>","ORD=ALL",LAST); 自带随机函数lr_paramarr_random("flights");

char *departcity,departcitys[30]; char *arrivacity,arrivacitys[30]; departcity = lr_paramarr_random("flights"); lr("%s",departcity); sprintf(departcitys,"Value=%s",departcity);把Value=departcity变为departcitys变量

可以直接更换Value=、、、为departcitys。

设置{departdate}进入Parameter List中选择Parameter type为Date并可以更改%a/%d/%y为%Y,就是年的全称2018。

web_reg_save_param("fightline","RB={departdate}"); char *flightno; char flightnumber[25]; flightno = lr_paramarr_random("flightline"); 如果判断参数的关联:sprintf(fligghtnumber,"Value=%s%s",flightno,lr_eval_string("{departdate}"));

另外一种取随机数: int flightcount; int departrandnum=0; flightcount=atoi(lr_eval_string("{flights_count}")); departrandnum = rand()%(flightcount/2)+1; sprintf(departstr,"{flights_%d}",departrandnum); lr(lr_eval_string(departstr));

SPDY协议:Google开发的基于TCP的应用层协议 Application        --- HTTP Session            --- SPDY Presentation(仪式) --- SSL Transport          --- TCP

WebSocket 在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。 1. Header 互相沟通的Header是很小的-大概只有 2 Bytes 2. Server Push 服务器的推送,服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。

Clint-Headers Request-Line:GET/HTTP1.1 Accept:text/html Accept-Encoding:gzip Accept-Language:zh-cn Connection:keep-alve 保持长连接 Cookie:BAIDUID Host:www.baidu.com User-Agent:Mozilla

Headers-Received Status-Line:HTTP1.1 200 OK ...

content:渲染后代码...

linux:内存swap 有些程序长时间不操作,或物理内存不足启动swap。 内存paging时时刻刻发生操作。 TCP 三次握手四次挥手 netstat -ae|grep "TIME_WAIT" |wc –l查看网络中time_wait修改配置文件排除问题。

httpwatch:查看,支持自动化API查询。Fiddler:本身代理Composer下的Parsed,可以拉拽一次协议查看并修改,端口8888,Inspectors下的Raw就是显示所有的请求。并且可以测试https,需要Tools下的Fiddler Options下的https traffic。并且可以自定义服务器返回。firbug:修改前台界面。colasoft:从网卡读取数据。

netstat -ano,列出所有端口的情况。 tasklist | findstr "8888" 任务管理表内找8888字符串

相应时间:客户端最多65535、网络、应用服务器、数据库 1.DNS 2.Connect 3.Send 4.Wait 清楚DNS ipconfig /flushdns

网络三个层次:核心层、汇聚层、接入层 网络吞度量,网络设备连接

应用服务器: 程序的健壮,小号资源合理 启动压缩(压缩文本而非其他) 缓存 预热 线程配置

数据库: 索引是否正常使用(db2分区键) SGA是否分配合理 多用关联少用in 集合操作能用union all就不用union

最后客户端接收数据进行渲染

脚本开发的原则:简单、正确、高效 单用户循环一次,多次(Vugen) 多用户循环一次,多次(controller)

查看数据库:mysql -q  user datacenter show tables show create table Bill_Electric显示表的建表结构。 查看表缺少UNIQUE KEY '' () USING BTREE,联合组件。 alter table Bill_Electric add unique index AK_UK_Bill_Electric('AccountNo','Mobile','Period')USING BTREE; 表内加入组件。 show variables like '%query%'; set global slow_query_log=1; set global log_queries_not_using_indexes = 1;

增加一些知识:数据库:安装重启,基本SQL语句,数据库架构,数据库原理,mysql的组建、引擎、man查询帮助、回表、联合索引,

性能测试报告

新建脚本时,可以选择java内的java vuser。是编译的,所以要装JDK,错误提示更精确。Run-time Setting内的Java VM下的Use specified JDK,指定JDK为C:\jdk-1.6 全部写在action内,不要去其他地方写代码。 不足:有些语法支持不好,例如静态代码块,少用不常用的语法和功能。有时因为缓存,而需要切换JDK,才能正常。 不足如下: class StaticBlock1{   static{     System.out.println("H");   }

  public static void main(String[] args){      System.out.println("L");   } } out:H out:L 静态代码块,会在new后马上开始执行,不需要调用。

只有一个类是public,定义class可以在任何位置。

如果需要引入外部的class文件,只需要把文件放入到保存的文件夹内,就可以直接new了。或者在Run-time Setting内classpath添加jar包。

注意:1.脚本中包括自定义的类,需要确保类是线程安全的,如果不确定,使用进程方式,可以充分隔离。 线程安全,同一个对象或变量,被线程争抢。没有修改肯定是安全的。线程安全是很难检测的,但是在大压力或者CPU资源紧张的时候相对容易发现。 import lrapi.*; public class Actions{   private static int iteration_counter = 0;   public int init(){     return 0;   }   public int action(){     iteration_counter++;    return 0;   }   public int end(){     lr.message(iteration_counter);     return 0;   } } 只能加锁 不要再LR内自己加线程,要LR来加线程。

开发Java Vuser: 1.是否使用(1.强大的开源类库。2.更方便使用开发的自定义的类。) 2.在eclipse中编写一个正确的模拟代码 3.将eclipse代码移到LR中 4.结合业务特点,对脚本进一步增强 5.使用Controller运行多用的JavaVuser

P46 一般遇到Socket使用java public class Actions{   private SendOverSocket sos = null;   private String receiver = null;   private int version;   public int init() throw Throwable{     sos = new SendOver   } }

从web脚本转化Java Vuser 1.使用sed.exe 2.将要转换的web脚本复制出来并保存到文本中 3.参数界定符部分需要由于{}手动改成<> 4.打开DOS 5.切换到C:\Program Files\HP\LoadRunner\dat 6.运行..\bin\sed -f web_to_java.sed c:\web.txt > c:\java.txt 7.创建参数并进行其他操作

第15讲--虚拟与现实的结合-探索Java虚拟机 Java虚拟机: 虚拟化技术:所谓虚拟化技术就是将事物从一种形式转变成另一种形式,最常用的虚拟化技术有操作系统中内存的虚拟化,实际运行时用户需要的内存空间可能远远大于物理机器的内存大小,利用内存的虚拟化技术,用户可以将一部分硬盘虚拟化为内存,而这对用户是透明的。 JVM的启动流程: java xxx 装载配置寻找jvm.cfg 根据配置寻找JVM.dll:JVM.dll为JVM主要实现 初始化JVM获得JNIEnv接口:JNIEnv接口是为JVM接口,findClass等操作通过它实现。 找到main方法并运行。

查看虚拟机进程: package com.test; public class Test { public static void main(String[] args) throws InterruptedException {     System.out.println("************start*************");     Thread.sleep(30000000);     System.out.println("*************end**************"); } } 查看任务管理器内启动javaw.exe *32

Java虚拟机运行时数据区结构图

http://www.catalannuan.com/2015/04/02/about-jvm/

 

标签: 压力变送器mpm486mpm430压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台