发布新日志

  • LoadRunner监控Linux与Windows方法

    2013-08-14 17:25:44

    LoadRunner监控Linux与Windows方法


      一、监控windows系统:

      1、监视连接前的准备工作

      1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Service (开始—)运行 中输入services.msc,开启对应服务即可)。

      2)在被监视的WINDOWS机器上:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹 (要是没有自己手动加上)。

      3)在安装LR的机器上,开始—》运行,输入 \\被监视机器IP\C$ 然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了。(LR要连接WINDOWS机器进行监视要有管理员帐号和密码才行。)

      问题:在执行步骤3)时,输入 \\被监视机器IP\C$,出现不能以administrator身份访问被监控系统(若采用这种方式用LR对其监控的话,会提示:“找不到网络路径”)的情况,现象就是用户名输入框是灰色的,并且默认用户是guest。

      解决办法:这是安全策略的设置问题(管理工具 -> 本地安全策略 -> 安全选项 ->“网络访问:本地帐户的共享和安全模式”)。默认情况下,XP的访问方式是“仅来宾”的方式,如果你访问它,当然就固定为Guest来访问,而guest账户没有监控的权限,所以要把访问方式改为“经典”模式,这样就可以以administrator的身份登陆了。修改后,再次执行步骤3),输入管理员用户名和密码,就可以访问被监控机器C盘了。

      若这样都不行的话(可能是其它问题引起的),那只好采取别的方法了。在服务器的机子上,通过windows自带的“性能日志和警报”下的“计数器日志”中新增加一个监控日志(管理工具—)性能—)性能日志和警报),配置好日志,也能监控服务器的cpu、memory、disk等计数器。当然,这种方法就不是用LR来监控了。

      2、用LR监视windows的步骤

      在controller 中,Windows Resources窗口中右击鼠标选择Add Measurements,添加被监控windows的IP地址,选择所属系统,然后选择需要监控的指标就可以开始监控了。

      二、监控linux

      1 准备工作

      可以通过两种方法验证服务器上是否配置了rstatd守护程序:

      ①使用rup命令,它用于报告计算机的各种统计信息,其中就包括rstatd的配置信息。使用命令rup 10.130.61.203,此处10.130.61.203是要监视的linux/Unix服务器的Ip,如果该命令返回相关的统计信息。则表示已经配置并且激活了rstatd守护进程;若未返回有意义的统计信息,或者出现一条错误报告,则表示rstatd守护进程尚未被配置或有问题。

      ②使用find命令

      #find / -name rpc.rstatd,该命令用于查找系统中是否存在rpc.rstatd文件,如果没有,说明系统没有安装rstatd守护程序。

      如果服务器上没有安装rstatd程序(一般来说LINUX都没有安装),需要下载一个包才有这个服务,包名字是rpc.rstatd-4.0.1.tar.gz. 这是一个源码,需要编译,下载并安装rstatd(可以在[url]http://sourceforge.net/projects/[/url]rstatd<wbr>这个地址下载)

      下载后,开始安装,安装步骤如下:

      tar -xzvf rpc.rstatd-4.0.1.tar.gz

      cd rpc.rstatd-4.0.1/

      ./configure —配置操作

      make —进行编译

      make install —开始安装

      rpc.rstatd —启动rstatd进程

      2)安装完成后配置rstatd 目标守护进程xinetd,它的主配置文件是/etc/xinetd.conf,它里面内容是一些如下的基本信息:

      #

      # xinetd.conf

      #

      # Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.

      # Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.

      #

      defaults

      {

      log_type = FILE /var/log/xinetd.log

      log_on_success = HOST EXIT DURATION

      log_on_failure = HOST ATTEMPT

      #only_from = localhost

      instances = 30

      cps = 50 10

      #

      # The specification of an interface is interesting, if we are on a firewall.

      # For example, if you only want to provide services from an internal

      # network interface, you may specify your internal interfaces IP-Address.

      #

      # interface = 127.0.0.1

      }

      includedir /etc/xinetd.d

      我们这里需要修改的是/etc/xinetd.d/下的三个conf文件 rlogin,rsh,rexec这三个配置文件,打这三个文件里的disable = yes都改成 disable = no ( disabled 用在默认的 {} 中 禁止服务)或是把# default: off都设置成 on 这个的意思就是在xinetd启动的时候默认都启动上面的三个服务!

      说明:我自己在配置时,没有disable = yes这项,我就将# default: off改为:default: on,重启后(cd /etc/init.d/ ./xinetd restart)通过netstat -an |grep 514查看,没有返回。然后,我就手动在三个文件中最后一行加入disable = no,再重启xinetd,再使用netstat -an |grep 514查看,得到tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN结果,表明rsh服务器已经启动。

      只要保证Linux机器上的进程里有rstatd和xinetd这二个服务就可以用LR去监视了。

      两点小的技巧:

      ①检查是否启动: rsh server 监听的TCP 是514。

      [root@mg04 root]# netstat -an |grep 514

      tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN

      如果能看到514在监听说明rsh服务器已经启动。

      ②检查是否启动: rstatd

      输入命令: rpcinfo -p

      如果能看到类似如下信息:

      程序 版本 协议 端口

      100001 5 udp 937 rstatd

      100001 4 udp 937 rstatd

      100001 3 udp 937 rstatd

      100001 2 udp 937 rstatd

      100001 1 udp 937 rstatd

      那就说明rstatd服务启动了,(当然这里也可以用ps ax代替)

      ③重起xinetd方法:

      在suse linux如下操作:

      cd /etc/init.d/

      ./xinetd restart

      看到网上有的地方说使用如下命令:

      # service xinetd reload

      # /sbin/service xinetd rstart

      不知道是在什么系统用的。

      ④安装rsh,和rsh-server两个服务包方法

      a. 卸载rsh

      # rpm –q rsh----------查看版本号

      # rpm -e 版本号---------卸载该版本。

      b.安装

      # rpm –ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm

      ⑤在启动rpc.rstatd时,会报错“Cannot register service: RPC: Unable to receive;errno = Ction refused”。

      解决方法如下:

      # /etc/init.d ./portmap start

      # /etc/init.d ./nfs start

      然后再次启动rpc.rstatd就好了。

      最后,在controller中,将UNIX resources拖放到右边窗口里面,右击鼠标选择Add Measurements,添加被监控linux的IP地址,然后选择需要监控的指标就可以了。

      三、监控UNIX

      lr监控UNIX,UNIX先启动一rstatd服务

      以下是在IBM AIX系统中启动rstatd服务的方法:

      1、 使用telnet以root用户的身份登录入AIX系统

      2、 在命令行提示符下输入:vi/etc/inetd.conf

      3、 查找rstatd,找到

      #rstatd sunrpc_udp udp wait root /usr/sbin/rpc.rstatd rstatd 100001 1-3

      4、将#去掉

      5、:wq保存修改结果

      6、命令提示符下输入:refresh –s inetd 重新启动服务。

      这样使用loadrunner就可以监视AIX系统的性能情况了。

      注:在HP UNIX系统上编辑完inetd.conf后,重启inetd服务需要输入inetd -c

      UNIX上也可以用rup命令查看rstatd程序是否被配置并激活

      若rstatd程序已经运行,重启时,先查看进程ps -ef |grep inet,然后杀掉进程,再refresh –s inetd进行重启。

  • LoadRunner使用遇到的问题集锦

    2013-08-14 16:59:04

    LoadRunner使用遇到的问题集锦


    • 文章来源:【转载】

    1、把HTML的内容输出到LOG中的方法

      1、在脚本要记录HTML的URL前面加入函数:web_create_html_param("MyHtml", "<html>", "");;

      2、在脚本要记录HTML的URL后面加入函数:lr_output_message("###the HTML is %s", lr_eval_string(" {MyHtml}"));;

      3、在Controller中设置Run-Time Settings,把log设置为Always Send Message;

      4、在Controller中设置Run-Time Settings,把Miscellaneous设置为在发生错误时继续运行(在这里不是必须);

      5、在Controller中设置Run-Time Settings,把Preferences设置为Enable image and text check;(在这里不是必须);

      6、在Controller的日志文件RES中可以查看到每个虚拟用户的LOG;

    2、如何在Controller中添加系统资源检测

      今天早上突然想把Windows的性能监视放到LR中,达到方便快捷的目的,下面的是具体的步骤:

      1、使用192.168.0.159作为监控的对象,开通Remote Procedure Call和Remote Registry两个服务,Remote Registry一般都是给禁止的,可以改为手动并启动;

      2、在159中右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹;

      3、在159中使用命令netstat /ano查看445端口是否被打开;

      4、输入\\192.168.0.159\c$,再输入用户名和密码,如果能进入c盘,那就说明有控制权了;

      5、在Controller的Run中找到Windows Resources,对图点击右键中的Add Measurements,添加计数器;

      6、需注意159机上的BlackIce;

      7、对Windows Resources Graph的技巧使用,可以冻结窗体,导出HMTL,显示某个计数器等;

    3、对ANALYSIS中不能导出页面细分下的子项的问题的处理方法?

      1、问题描述:对ANALYSIS的导出WORD功能中只能导出树中的图表,在页面细分中点击不同的节点会有不同的图表,但是却无法把所有节点的图表一起导出;

      2、如果想生成Time to First Buffer Breakdown下面Login事务和Loading事务下的图表都导出来,方法就是新建两张Time to First Buffer Breakdown图表,在不同的下面点击图表,并修改名称;

      3、在导出列表中选中要导出的图表:Time to First Buffer Breakdown-All && Time to First Buffer Breakdown-Login && Time to First Buffer Breakdown-Loading;

      4、总结:虽然这样做有点麻烦,但是比之前点击每个图再导出一个WORD来有用的多,但是LR可以做到在导出列表中以树的形式显示可以导出的图表,不过LR要解决图表没有名称的问题;

    4、在中文版Analysis中显示系统资源图的原因与解决

      1、是否可以通过修改ACCESS记录来修改这个BUG?

      2、不知道它添加图表的列表是不是通过数据库LOAD的?迄今还没有找到这些记录,只找到资源图表数据;

      3、解决办法1:是用VNC截图,但是这样只能看到计数器曲线,没什么意义;

      4、解决办法2:在Controller中导出系统资源数据,里面有量化数据,比较真实,不过每个场景都要导出一次就很麻烦,并且不好管理,无法对数据进行帅选和合并,如果打开导出的页面有乱码,那就在编码方式选择"自动选择";

      5、解决办法3:使用英文版生成的ANALYSIS,再拿到中文版下面,是可以看到系统资源这个图表的,其实我应该早想到这样的,因为在中文版下无法显示不是Analysis的错,而是Controller的错,Analysis里面是包括ACCESS和其它包含系统资源的记录的,所以在中文版是能显示的;

    5、终于使用LR实现了不同虚拟用户使用不用的帐号登陆,实行不同用户并发的问题

      1、在脚本设计中添加参数,参数名称为LoginUserName,选择参数类型为FILE;

      2、很关键的一步就是:选者UNIQUE和EACH ITERATION/ONCE;

      3、在脚本中把登陆名改为参数名;

      4、使用Controller进行测试,在运行时设置LOG记录;

      5、查看LOG,可以看到每个虚拟用户是使用不同的帐号登陆的;

      6、总结:使用SEQUENTIAL会使得参数每次出现的地方的值都不一样;如何想使用更多用户的登陆可以使用参数数据库化;

    (参考:LoadRunner参数化)

    6、 LR参数数据库化(姑且这么叫,就是参数的来源于数据库)实践

      1、以XQP登陆帐号为例,把bw_Users表中的UserName做为参数LoginUserName的值;

      2、过程都比较简单,需要注意的是使用FILE参数类型,参数值列表中的值只有100个,其它的可以通过Edit with Notepad查看;

      3、在Update Value on 中有以下几个选项:

      Each Occurrence:在运行时,每遇到一次该参数,便会取一个新的值;

      Each iteration:运行时,在每一次循环中都取相同的值;

      Once:运行时,在每次循环中,该参数只取一次值;

      可以看出,是按照从脚本小范围到大范围的选择;

      4、在Select next row 有以下几种选择:

      Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取;

      Random:在每次循环里随机的读取一个,但是在循环中一直保持不变;

      Unique :唯一的数。注意:使用该类型必须注意数据表有足够多的数;

      Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录;通常用在有关联性的数据上面;

      可以看出,是和循环(迭代)很有关系的;

    7、 发现可以对参数数据库化的数据进行作弊,作弊方法如下:

      1、使用数据库管理器导出想要的数据为EXCEL;再保存为dat文件,再参数设置里面引用该文件;

      2、在脚本文件夹中找到[参数名].dat文件;

      3、对[参数名].dat文件进行编辑,把EXCEL中的数据拷贝到dat文件中;

      4、进入脚本编辑,查看参数,可以见到刚刚拷贝的数据;

      总结:虽然这个方法没什么很大用处,但是在无法使用VUGenerator连接数据库的时候就非常有用;

    8、当在此函数中,查找的text="中文"时,LR硬是报错,换成英文字体便成功。后来,查了好久,发觉是Record-Options 中我勾选了support charset中的UTF-8,可能是录制过程中LR捕捉到的是中文,而回放过程中此函数在HTML原文件中查找到的却是乱码?总而言之,把此选项去除之后,重新录制脚本,回放能够成功了!

     

    9LoadRunner场景执行时出现错误:“load generator is currently running the maximum number of vuser of this type”

    解决方法:

    Loadruuner默认场景并发最大用户数=1000,所以需要设置load generator->Details->Vuser limits->Other Vusers更换参数值即可,如10000;当然需要你的序列号是支持,目前最大支持6.2w的序列号。

  • 系统性能调优经验分享(转载)

    2013-08-14 16:57:00

    系统性能调优经验分享(转载)


    性能优化的思路

    首先是较为精准的定位问题,借助于相应的工具包,分析系统性能瓶颈在哪,在根据其性能指标,以及所处于层级决定选择优化的方式方法。在选择优化的方式方法时,大家可以参照以下章节调优方法,架构优化递进,进行正确的,有针对性,有步骤的优化。可能会发现部分指导思想或许有相悖嫌疑,大可不必较真,系统优化的过程本身就是一个不断分离+共享的组合拳,至于具体选择哪种优化方式,根据具体需求来定,但大型应用发展的总体思路是不断分离,在通过索引(非数据库)进行关联起来,

    切记:优化一定要对系统进行细致的望闻问切,找到性能问题根源切入点,而不被表象迷糊,对症下药,发现病症所在的医生并不比操作手术刀的医生水平差。本文有工具包一章节,对于需要做优化的人员,需要熟悉,他就是我们诊断所用的CT,例如我们发现内存高了,首先想到不是内存不够用,而是为什么如此消耗内存,用工具看看内存消耗在什么地方,试想之,如在医院,病人告诉医生,他心脏不好,医生就换心脏,那样的话,每个人只要熟练掌握菜刀,都可以做医生

    迭代优化

    性能优化未必一次性就能满足的,可能此处瓶颈消失了,系统一旦运转快速后,在其他地方又发现新的性能瓶颈,所以性能优化是一个迭代的工作。直至满足系统需要的性能指标。

    优化的成本

    系统性能设计或优化是否可以一步升天,按照最好的分布式架构进行设计和优化呢,单个节点一直也运转及其健康,理论上是可以达到共产国际的,但实际实施层面不可取,必须结合实际的非功能需求进行设计和优化,一则一步到极致的话,系统的成本太过虑庞大,光是性能设计和优化的成本就高于系统本身给客户所提供的价值,也造成研发成本开销过大。二则好像能够架构这样完美系统的人还没诞生。所以一句话也同样适合架构师:有理想而不理想化,废话少扯:具体见法则

    调优方法

    数据库优化

    很多应用,优化DB往往是最直接,最方便,见效最显著的,但并非所有的系统性能都处在瓶颈,或者DB瓶颈解决之后,可能应用层瓶颈,WEB层瓶颈,甚至架构瓶颈都会冒出来了,所以数据库优化十分重要,但往往很多人理解系统优化就是数据库优化,是不全面的。优化角色一般推荐具备较深数据知识的程序员,或者专业的DBA,而不只是会CRUD开发人员

    ◆ 建立正确的主键,外键,以及索引

    ◆  分离原则:读写分离,业务数据分离

    a) 分库

    b) 分区

    c) 分表

    d) 分列(将大字段,不常用的隔离到他表,按需查询)

    ◆  选择隔离级别:某些对数据一致性要求不高的,可以牺牲部分一致性,降低加锁阻塞

    ◆  保证事务简短以及减少不必要的锁机制。

    ◆  查询优化规则:

    e) 避免表内的相关子查询;

    f) 避免排序或为尽可能少的行排序,

    g) 做大量数据排序时相关数据放在临时表中

    h) .尽量在where后多传查询条件,以减少不必要返回的行

    i) .尽量select只需要的字段,以减少不必要返回的列

    ◆  分页存储过程:大列表的查询也可以利用分页存储过程达到优化效果。

    ◆  利用数据库缓存,视图,临时表等最大程度优化系统,并对存储过程和函数进行必要的优化

    ◆  如有需要,可以冗余表中字段,避免联合查询

    ◆  如有需要,也可以将表内的大字段分离到单独表中,使其单独查询

    ◆  必做多表关联时,尽量过滤不符条件表中数据,减少笛卡尔积计算量

    ◆  复杂表表:如实时性要求不高,尽量后台任务计算,避免动态查询

    应用层优化

    应用层优化侧重于应用层本身的逻辑优化,算法优化,代码优化等,优化的角色可以是熟悉应用的程序员

    ◆  优化算法,选择合适高效的算法,降低不必要的递归,循环、多层循环嵌套等计算

    ◆  避免申请过多的不必要的内存开销

    ◆  降低内存泄露(using,Dispose,弱引用,Finalize)

    ◆  使用频率较低的大文件,大对象,大数组等使用完毕后,及时释放

    ◆  使用频率较高的大文件,大对象,大数组尽量缓存

    ◆  考虑多线程技术

    ◆  选择适当的通信方式:长连接,短连接,有以下方式Socket、Remoting、Web Services(Rest,Soap)、WCF、 Named Pipes

    ◆  降低应用之间通信次数,例用户认证服务,工作流服务,数据库服务

    ◆  降低应用之间传输数据量,不必要传输的不传,少传

    ◆  缓存机制:缓存常用的,不易变化的,偶有变化,可以考虑缓存依赖机制

    ◆  支持异步计算,降低等待时间

    ◆  考虑延迟加载,或者提前加载两种方式

    ◆  分离原则:分离业务模块,如分离大I/O模块、分离高耗内存模块,分离高耗宽带模块

    ◆  考虑分布式应用,分布式存储,如以上所有仍然搞不定的

    Web优化

    Web优化偏向于熟悉前端开发的技术人员

    ◆  减少http请求

    ◆  避免404错误

    ◆  在html页面header加入缓存标签

    ◆  Gzip压缩网页

    ◆  减少cookie体积

    ◆  使用外部的js和css

    ◆  消减js和css

    ◆  压缩js

    ◆  使用css sprites技术,众多图片合成在一起,通过CSS切分,降低图片传输的频率和数据量

    ◆  可以使用静态网页的,避免使用动态网页

    架构优化递进

    为以示与应用层优化的区别,本文对架构的描述更侧重偏向于物理层面,再次赘述下,涉及变更架构的,需要我们的应用具有良好的拓展性,考验我们的架构师平时的功底,如何刚刚好满足需求以及两三年内业务增量,但并非架构做的越强大,越灵活,越可配置,越易水平拓展就是越好的,其一考虑此应用的投入产出比,换言之,是否值得投入这么多架构设计成本,其二架构设计也是具有一定的时效性的,IT速度太快了,今天的好东西未必是明天的好东西,年轻貌美的姑娘,总有变成老太婆那一天嘛,再者、越灵活的架构,就意味着存在更多的配置项,从某一方面,反而增加了系统的复杂度,最后、很多大型,成熟的应用,也并非一蹴而就,而是通过不断的调整优化,不断变更架构的。圣人也并非天生的,而是不断的总结,提炼,优化,重构

    ◆  硬件方面使用高性能的小型机、存储设备。使用极好的网络带宽

    ◆  物理分离Web Server和DB Server或者其他服务如:用户认证服务

    ◆  缓存

    ü 数据缓存机制

    ü 页面缓存机制

    ◆  物理分离业务模块,单业务单独部署一台服务器

    ◆  部署多台Web Server

    ◆  Web负载均衡-F5

    ◆  数据读写分离

    ◆  使用消息队列 进行各种应用间进行同步/异步计算

    ◆  应用间选择合适的通信方式,通信协议

    ◆  Web分布式,应用分布式,数据分布式

    ◆  分布式的节点使用高性能服务器,小型机群,辅以高速网络带宽等

    工具包

    ◆  进程管理器,CPU,内存,I/O

    ◆  日志:IIS日志,Windows日志,系统本身日志

    ◆  使用dotTrace,跟踪方法执行时间,找出速度慢的方法,针对性优化

    ◆  Sql Profile跟踪SQL耗时情况,针对性优化

    ◆  HttpWatch跟踪请求耗时,以及发送和收到数据量

    ◆  Performance Count,使用计数器,统计相关性能指标

    ◆  CLRProfiler内存泄露检测工具

    ◆  LoadRunner,压力测试,发现性能瓶颈

    其他补充

  • 如何使用LoadRunner监控Windows

    2013-08-14 16:46:31

    如何使用LoadRunner监控Windows


    • 文章来源:【转载】

    1、监视连接前的准备工作

    1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) Remote Registry Service (开始—)运行 中输入services.msc,开启对应服务即可)

    2)在被监视的WINDOWS机器上:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹(要是没有自己手动加上)

    3)在安装LR的机器上,开始—》运行,输入 \\被监视机器IP\C$ 然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了。(LR要连接WINDOWS机器进行监视要有管理员帐号和密码才行。)

    问题:在执行步骤3)时,输入 \\被监视机器IP\C$,出现不能以administrator身份访问被监控系统(若采用这种方式用LR对其监控的话,会提示:“找不到网络路径”)的情况,现象就是用户名输入框是灰色的,并且默认用户是guest

    解决办法:这是安全策略的设置问题(管理工具 -> 本地安全策略 -> 安全选项 ->“网络访问:本地帐户的共享和安全模式”)。默认情况下,XP的访问方式是“仅来宾”的方式,如果你访问它,当然就固定为Guest来访问,而guest账户没有监控的权限,所以要把访问方式改为“经典”模式,这样就可以以administrator的身份登陆了。修改后,再次执行步骤3),输入管理员用户名和密码,就可以访问被监控机器C盘了。

    若这样都不行的话(可能是其它问题引起的),那只好采取别的方法了。在服务器的机子上,通过windows自带的“性能日志和警报”下的“计数器日志”中新增加一个监控日志(管理工具—)性能—)性能日志和警报),配置好日志,也能监控服务器的cpumemorydisk等计数器。当然,这种方法就不是用LR来监控了。

    2、用LR监视windows的步骤

    controller 中,Windows Resources窗口中右击鼠标选择Add Measurements,添加被监控windowsIP地址,选择所属系统,然后选择需要监控的指标就可以开始监控了。

Open Toolbar