负载生成器是什么?
负载生成器,英文名 Load Generator,是运行脚本的负载引擎,也就是执行Vuser脚本运行Vuser模拟真实用户操作的机器。
为什么要对负载生成器的管理和设置?
当执行一个场景时,Controller 把场景中的每个用户配到负载生成器,在默认情况下,运行脚本使用的是本地的负载生成器。
但是模拟用户行为需要消耗一定的系统资源,如果要模拟大量的虚拟用户,就要消耗较多的系统资源,一台电脑可能就无法承受,这个时候可以通过调用多个Load Generator一起来完成大规模的性能负载。
所以,我们需要对负载生成器进行管理和设置,以满足大规模的性能负载测试。
如何添加负载生成器?
第一步:
(1)通过 Vuser --> Run-time Settings 设置运行模式
Load Generator 的核心是 MMDRV.EXE 进程,负责运行脚本模拟用户行为,该程序支持进程或线程的方式,我们选择默认的按线程运行Vuser。
进程和线程有什么区别呢?
Run Vuser as a process(进程):
如果按进程方式运行每个Vuser,则对于每个Vuser都将启动一个mdrv进程。如果设置了100个Vuser,则在任务管理器中出现100个mdrv进程。多个mdrv进程肯定会占用大量内存及其他系统资源,这就限制了可以在任一负载生成器上运行的Vuser的数量。
多数情况下,使用进程方式时一个Vuser会占用接近3MB的内存,而使用线程方式时一个Vuser大概只占用了200KB的内存。为了保证负载生成有效性,在实施性能测试前先测试一个负载器是否存在硬件瓶颈(生成负载时的CPU、内存、带宽占用情况等),确保负载器自身不会成为瓶颈,其CPU和内存的使用率最好不超过80%。
Run Vuser as a thread(线程):
如果按线程方式运行每个Vuser,即使设置了100个Vuser,也只会调用一个驱动程序 mdrv,这些Vusers将共享一个mdrv进程的内存段。这就节省了大量内存控件,就可以实现在一个负载生成器上运行更多的Vusers。
线程方式也有其缺点:
选择线程方式运行Vuser会带来一些安全问题,因为线程的资源是从进程资源中分配出来的,同一个进程中的多个线程会有共享的内存空间,这样可能会引起多个线程的同步问题。调度不好就会出问题,比如A线程要用的资源就必须等待B线程释放,而B线程也在等待其他资源释放才能继续。这就会出现这样的问题:同一个测试场景,用线程并发就会超时失败或报错,而用进程并发就没错。
两种方式虽然有区别,但两种方式的运行给服务端造成的压力是一样的。
第二步:
(2)在场景中添加负载生成器,有三种方法
一:
二:
三:
(3)点击添加Add,进入添加窗口,点击More出现更多信息。
- Name:输入框里可以填写具体的IP地址(本地、远程),也可以填写localhost(本机)、或非本机的其他计算机名;
- Platform: 选择操作系统;
- Temporary directory:LoadRunner的控制器将在临时目录中生成一些文件,用于储存场景运行时的数据;
- Enable load generator to take part in the scenario:使负载发生器能够参与场景生成,要勾选这项,使负载生成器在场景中生效。如果某个开启的负载生成器对于某个特定场景不可用,可临时禁用负载生成器,不必要把它从列表移除。
第三步:
(4)添加后可以看到负载生成器的状态与连接
有"Ready"和"Down"两种状态.
选择"Down"状态,点击右侧“Connect”按钮进行连接,如果"Down"状态变成“Ready”,说明连接成功,该负载生成器可以使用,否则就需要检查错误出在哪里。
连接不成功可能的问题及解决方法:
- 防火墙没关闭:Windows下,需要关闭防火墙;
- 对方计算机Load Generator的服务器代理没有开启:添加负载机器之前需要对方开启代理运行时设置(要开启小雷达);
- 选择 “Allow virtual users to run on this machine without user login”,允许虚拟用户无需用户登录即可在本机上运行;
- Domain:计算机全名;
- User:用户名;
- Password:密码;
输入以上信息之后点击OK,在电脑右下角就出现了雷达的图标,表示开启了代理,就可以让远程的Controller无须登陆就直接连接到这个Load Generator,这时候再去添加 Load Generator就可以了。
注意:本机电脑也需要开启远程负载生成器的LoadRunner Agent服务,Start > Programs > LoadRunner > LoadRunner Agent Proces
第四步:
(5)为脚本选择负载生成器
- 点击下拉三角按钮,可以看到我们添加的负载生成器;
- 选择要添加的负载生成器,对各主机进行虚拟用户分配。
第五步:
(6)负载均衡分配
在默认模式下,在Controller中添加多台Load Generators机器时,不管如何添加,最终只能选中一台机器。这样最终就只有被添加的这一台机器在负载了,显然不符合我们的目的。
为了解决这个问题,我们要更换场景模式:
选择 Scenario ---> Convert Scenario to the Percentage Mode,将场景模式由组模式更换为百分比模式。
这样我们可以自由选择负载生成器了,也可以选择全部的负载生成器,点击OK按钮,所选择的机器都将被添加进来。
当某个load generator的CPU超负荷使用,Controller停止在超负荷的load生成器上加载虚拟用户,并自动在其它参与了场景的生成器中分发虚拟用户,如果没有其它负载生成器,那么Controller会停止加载虚拟用户。
第六步:
选择一个负载生成器,点击Details,找到Run-Time Quota标签页,设置初始化vuser数量。
在场景监控中,初始化默认不会超过50用户,也就是最大并发是50个用户,我们想使用超过50的并发,就需要在这里进行设置了。
两个值都默认为50:
Number of Vusers that may be initialized at one time:可以一次初始化的vuser数量,表示最多加载多少用户开始运行脚本。
Limit the number of users that may be stopped at one time:加载多少用户就停止加载,开始运行脚本,不勾选表示初始化所有用户后开始运行。
不过这里的两个值,我们一般只在单并发时才进行修改,比如单并发100个用户,那么我们把两个值都设置为100。组合场景目前的加载方式我们是每秒加载两个,所以不需要修改这里。