我快乐,不是因为我得到的多,而是因为我计较的少

发布新日志

  • Windowns操作系统资源监控指标

    2008-12-15 17:02:08

    Windowns操作系统资源监控指标

    对象

    度量

    描述

    System

    %Total Processor Time

    系统上所有处理器都忙于执行非空闲线程的平均时间的百分比。在多处理器系统上,如果所有处理器始终繁忙,此值是100%,如果所有处理器是50%繁忙,此值为50%。而如果这些处理器中的1/4100%繁忙的,则此值为25%。它反映了用于有用作业上的时间的比率。每个处理器将分配给闲置进程中的一个闲置线程,以消耗所有其他线程不使用的那些非生产性处理器周期。

    Processor

    %Processor Time(Windowns 2000)

    处理器执行非空闲线程的时间百分比,此计数器设计为处理器活动的一个主要指示器。它是通过 测量处理器在每个采样间隔中执行空闲进程的线程所花费的时间,然后从100%中减去此值来进行计算的(每个处理器都有管委会空闲线程,它在没有其他线程准备运行时消耗处理器周期)。它可以反映有用作业占用的采样间隔的百分比。此计数器显示在采样期间所观察到的繁忙时间的平均百分比。它是通过监视服务处于非活动状态的时间,然后从100%中减去些值来计算的。

    System

    File Data Operation/sec

    计算机向文件系统设备发出读取和写入操作的速度。此操作不包括文件控制操作。

    System

    Processor Queue Length

    线程单元中的处理器队列的即时长度。如果不同时监视线程计数,则此计数始终为0。所有处理器都使用单一队列(线程在该队列中等待处理器进行循环)。此长度不包括当前正在执行的线程。一般情况下,如果处理器队列的长度一直超过2,则可能表示处理器堵塞。此值为即时计数,不是一段时间的平均值

    Memory

    Page Faults/sec

    此值为处理器中的页面错误的计数。当进程引用特定的虚拟内存页,该页不在其在主内存的工作集当中时,将出现页面错误。如果某页位于待机列表中(因此它已经位于主内存中),或者它正在被共享该页的其他进程所使用,则页面错误不会导致该页从磁盘中提取出

    PhysicalDisk

    %Disk Time

    选定的磁盘驱动器对读写请求提供服务的已用时间所占百分比

    Memory

    Pool Nonpaged Bytes

    非分页池中的字节数,指可供操作系统组件完成指定任务后从其中获得空间的系统内存区域。非分页池页面不可以退出到分页文件中,它们自己分配以来就始终位于主内存中

    Memory

    Pages/sec

    为解析内存对页面(引用时不在内存中)的引用而从磁盘读取的页数或写入磁盘的页数。这是“Page Iput/sec”和“Page Output/sec”的和。此计数器中包括页面流量代表着用于访问应用程序的文件数据的系统缓存。此值还包括传递到/来自非缓存映射内存文件的页数,如果关心内存压力过大问题(即系统失效)和可能产生的过多分页,则这是值得考虑的主要计数器

    System

    Total Interrupts/sec

    计算机接收并处理硬件中断的速度。可以生成中断的设备有系统时钟、鼠标、数据通信线路、网络接口卡和其他外围设备。此计数指示这些设备在计算机上所处的繁忙程度

    Objects

    Threads

    计算机在收集数据时的线程篓。注意,这是一个即时计数,不是一段时间的平均值。线程是基本的可执行实体,用于处理器中执行指令

    Process

    Private Bytes

    专为此进程分配,无法与其他进程共享的当前字节数

  • LR监控指标数据分析

    2008-12-15 17:00:56

    监控指标数据分析
    1.最大并发用户数:
    应用系统在当前环境(硬件环境、网络环境、软件环境(参数配置))下能承受的最大并发用户数。
    在方案运行中,如果出现了大于3个用户的业务操作失败,或出现了服务器shutdown的情况,则说明在当前环境下,系统承受不了当前并发用户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数。
    如果测得的最大并发用户数到达了性能要求,且各服务器资源情况良好,业务操作响应时间也达到了用户要求,那么OK。否则,再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在。

     

    2.业务操作响应时间:
    ? 分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用事务性能摘要图,可以确定在方案执行期间响应时间过长的事务。
    ? 细分事务并分析每个页面组件的性能。查看过长的事务响应时间是由哪些页面组件引起的?问题是否与网络或服务器有关?
    ? 如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长,请使用网络监视器图确定导致性能瓶颈的网络问题
    3.服务器资源监控指标:
    内存:
        1 UNIX资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。

     

        2 Windows资源监控中,如果Process\Private Bytes计数器和Process\Working Set计数器的值在长时间内持续升高,同时Memory\Available bytes计数器的值持续降低,则很可能存在内存泄漏。

     

    内存资源成为系统性能的瓶颈的征兆:
        很高的换页率(high pageout rate);
        进程进入不活动状态;
        交换区所有磁盘的活动次数可高;
        可高的全局系统CPU利用率; 
        内存不够出错(out of memory errors) 

     

    处理器:
        1 UNIX资源监控(Windows操作系统同理)中指标CPU占用率(CPU utilization),如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。如果服务器专用于SQL Server,可接受的最大上限是80-85% 
        合理使用的范围在60%70%
        2 Windows资源监控中,如果System\Processor Queue Length大于2,而处理器利用率(Processor Time)一直很低,则存在着处理器阻塞。

     

    CPU资源成为系统性能的瓶颈的征兆:   
         很慢的响应时间(slow response time) 
         CPU空闲时间为零(zero percent idle CPU) 
         过高的用户占用CPU时间(high percent user CPU) 
         过高的系统占用CPU时间(high percent system CPU) 
        长时间的有很长的运行进程队列(large run queue size sustained over time) 

     

    磁盘I/O
        1 UNIX资源监控(Windows操作系统同理)中指标磁盘交换率(Disk rate),如果该参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。
        2 Windows资源监控中,如果 Disk TimeAvg.Disk Queue Length的值很高,而Page Reads/sec页面读取操作速率很低,则可能存在磁盘瓶径。 

     

    I/O资源成为系统性能的瓶颈的征兆 :
         过高的磁盘利用率(high disk utilization) 
        太长的磁盘等待队列(large disk queue length) 
        等待磁盘I/O的时间所占的百分率太高(large percentage of time waiting for disk I/O) 
        太高的物理I/O速率:large physical I/O rate(not sufficient in itself) 
        过低的缓存命中率(low buffer cache hit ratio(not sufficient in itself)) 
        太长的运行进程队列,但CPU却空闲(large run queue with idle CPU) 

     

    4.数据库服务器:
    SQL Server数据库:
        1 SQLServer资源监控中指标缓存点击率(Cache Hit Ratio),该值越高越好。如果持续低于80%,应考虑增加内存。
        2 如果Full Scans/sec(全表扫描/秒)计数器显示的值比12高,则应分析你的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。 
        3 Number of Deadlocks/sec(死锁的数量/):死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0
       4 Lock Requests/sec(锁请求/),通过优化查询来减少读取次数,可以减少该计数器的值。

     

    Oracle数据库:
      1 如果自由内存接近于0而且库快存或数据字典快存的命中率小于0.90,那么需要增加SHARED_POOL_SIZE的大小。
        快存(共享SQL区)和数据字典快存的命中率: 
       select(sum(pins-reloads))/sum(pins) from v$librarycache; 
        select(sum(gets-getmisses))/sum(gets) from v$rowcache; 
        自由内存:    select * from v$sgastat where name=’free memory’; 
    2 如果数据的缓存命中率小于0.90,那么需要加大DB_BLOCK_BUFFERS参数的值(单位:块)。
      缓冲区高速缓存命中率:
        select name,value from v$sysstat where name in ('db block gets’,
        'consistent gets','physical reads') ; 
        
        Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))
    3 如果日志缓冲区申请的值较大,则应加大LOG_BUFFER参数的值。
        日志缓冲区的申请情况 :
         select name,value from v$sysstat where name = 'redo log space requests' ;
    4 如果内存排序命中率小于0.95,则应加大SORT_AREA_SIZE以避免磁盘排序 。
       内存排序命中率 :
         select round((100*b.value)/decode((a.value+b.value), 0, 1, (a.value+b.value)), 2)from v$sysstat a, v$sysstat b where a.name='sorts (disk)' and b.name='sorts (memory)' 
       
        注:上述SQL ServerOracle数据库分析,只是一些简单、基本的分析,特别是Oracle数据库的分析和优化,是一门专门的技术,进一步的分析可查相关资料。
  • loadrunner中Lr_save_string()函数和Itoa()函数的使用

    2008-12-10 12:27:48

    目的:使用for循环添加多条有规律的数据,比如说:a1a2a3......a1000

    方法:从上面看1-1000是一个有序序列,并且前面的a都是固定的,所以只需要用for循环将1-1000循环出来就可以了。

          但是loadrunner使用的是C语言的语法,所以不能向在java中一样,将两个变量直接相加(+)(+:连字符)

          所以这个时候就需要将首先将int变量转换成string,然后再用lr_save_string()函数将该变量用loadrunner可以识别的参数化方式保存起来,再应用到录制的脚本中就可以了

         

    函数简介:

          int itoa ( int value, char *str, int radix );

          函数目的:int类型转换成string

          参数介绍:value 要转换的int型的值

                     str 目标字符串,即将转换成的string值保存到str

                    radix:转换数字时所用的基数 10:十进制;2:二进制……

                   

          int lr_save_string (const char *param_value, const char *param_name);

          函数目的:param_value值保存到param_name变量中

          参数介绍:param_value:要保存的值

                    param_name 变量名称

     

    问题:为什么要用itoa()lr_save_string()两个函数相结合使用呢?

          因为lr_save_string()中的两个参数都是char类型的指针,int类型的值必须经过转换才能在lr_save_string()函数中使用,所以此处就要将itoa()lr_save_string()两个函数相结合使用。

    */

     

    Action()

    {

           int i;

           char str[100];   //定义一个数组用来保存int类型转换后的值

     

           for(i=0;i<=9;i++){

                  itoa(i,str,10);

                  lr_save_string(str,"ID");

                  lr_output_message("==str:=%s==ID:=%s====",str,lr_eval_string("{ID}"));

           }

     

     /*

    lr_save_string()将数组保存到变量中以后就可以应用到Loadrunner录制的脚本中了

    {ID}loardrunner识别参数的方式

     

        web_url("login",

                  "URL=http://server0.im.sonoro.cn:18001/login?username=a{ID}&password=test&autoLogin=false&1211433835878&1211433835878",

                  "TargetFrame=",

                  "Resource=0",

                  "RecContentType=text/html",

                  "Referer=http://server0.im.sonoro.cn:18001/proxy.html?1211433821547",

                  "Snapshot=t6.inf",

                  "Mode=HTML",

                  LAST);

     

    */

           return 0;

    }

  • 详解lr参数表中的参数分配规则

    2008-12-10 12:26:25

    <!--[if !supportMisalignedColumns]--> <!--[endif]-->

    Select next row

    Update value on

     

     

    Sequential

    Each iteration

    每次执行Action时,参数值改变。

    每个Vuser的参数取值都一样。

    Each occurrence

    每次取参数时,参数值改变。

    每个Vuser的参数取值都一样。

    Once

    唯一

    Random

     

    自由选取参数

     

     

     

    Unique

    Each iteration

    每次执行Action时,参数值改变。

    Allocate Vuser values in the Controller

    可选择“自动”和“手动”分配。

    “自动”分配把参数平均分给每个Vuser

    “手动”分配时,参数不够的话,压力测试时会报错。

    Each occurrence

    每次取参数时,参数值改变。

    只有“手动”分配。参数不够,测试时报错。

    Once

    唯一

     

    When out of values

    Abort Vuser

    结束Vuser

    Continue in a cyclic manner

    使用同样的循环样式继续

    Continue with last value

    使用最后一个参数值继续






     

    注释:

    iteration: Run-time Settings中对Number of Iterations进行设置,即每次运行脚本时,Action反复执行的次数。

    occurrence: 在一个Action中出现2次以上的同一个参数表。

    注意:

    当在脚本中使用lr_message lr_ouput_message输出参数值时,

    例如lr_message(“result=%s”,lr_eval_string(“{NewParam}”)

    参数表也会给这个语句中的{NewParam}分配一个参数值。

     

    Parameter type: Unique Number

    Number range: Start: 1  

             Block size per Vuser: 100   从1开始,每个并发使用100个参数.第1个并发使用1-                                      100,第2个使用101=200,第3个……

    Number format: %d 不保留有效数字。

                   %01d 保留1位有效数字。

Open Toolbar