压力测试平台(nGrinder)入门到精通教程

转载:https://blog.csdn.net/chiqiao5151/article/details/100725264?utm_medium=distribute.pc_relevant.none-task-blog-title-8&spm=1001.2101.3001.4242

nGrinder简介&架构

1、 nGrinder简介&架构

nGrinder管理员指南

1、nGrinder安装指南
2、nGrinder管理员指南
3、nGrinder控制器配置指南
4、nGrinder集群指南
5、nGrinder代理配置指南
6、nGrinder代理自动更新
7、nGrinder私有代理

nGrinder用户指南

1、nGrinder快速入门
2、nGrinder测试配置
3、如何通过线程逐步提升压力
4、nGrinder使用者相关

nGrinder脚本指南

1、nGrinder脚本指南
2、nGrinder脚本收集
3、nGrinder脚本管理
4、nGrinder脚本安全

nGrinder开发文档

1、nGrinder REST API

nGrinder常见问题

1、 nGrinder简介&架构

nGrinder是一个用于在多台机器上运行用jython(在JVM上运行的python)编写的测试脚本的应用程序。它的内部引擎是基于Grinder。nGrinder分别用控制器和agent将Grinder的控制台和agent包装起来,并扩展了支持多个并发测试的特性。

 
nGrinder系统架构

nGrinder由两个主要组件组成。

Controller -为性能测试提供web界面。-协调测试过程。-整理和显示测试统计数据。-让用户创建和修改脚本。
Agent——在代理模式下运行时,运行将负载放到目标机器上的进程和线程。在监视器模式下运行时监视目标系统性能(例如:CPU/内存)

当启动代理时,它们尝试连接到控制器。然后它们被附加到AgentControllerServer组件中。AgentControllerServer(类似于代理池)管理当前代理池。每当用户启动性能测试时,就会创建一个新的控制台来协调代理,并从AgentControllerServer移交所需的代理数量。控制台(命名为SingleConsole,以区别于Grinder)将测试脚本和测试资源发送给多个分配的代理,并开始控制测试流,直到测试结束。测试完成后,使用的代理将返回给AgentControllerServer,稍后在其他测试中使用。SingleConsole同样也返回给ConsoleManager。

nGrinder与Grinder最大的区别在于nGrinder在控制器中保留了多个控制台实例和代理。每个控制台独立于其他控制台,所有控制台都可以并发运行。许多代理可以预先添加,并且可以在需要时进行分配。与grinder不同,nGrinder的开发目的是最大化对agent机器的利用率。

众所周知的负载测试工具,如“Performance Center”,都有一个测试保留特性,可以在用户开始测试时保证代理的可用性。但是保留方法会导致代理使用问题。我们观察到,人们倾向于为预防而准备代理,即使他们实际上并没有进行测试。根据我们的经验,平均代理CPU利用率不足10%。

出于这个原因,nGrinder支持多重测试和动态代理分配,因此只有在执行真正的测试时,才会动态地将代理分配给测试。这使得nGrinder成为所有竞争者中唯一的解决方案。由于代理的数量相对较少,多个用户可以同时运行多个测试。可能并发测试的数量取决于自由代理的数量。

集群架构

从nGrinder 3.1版本中,我们引入了nGrinder控制器集群,使性能测试可以由其中一个集群控制器执行,并支持使用多组代理(命名区域)。

下面是没有集群支持的架构。


 
nGrinder一般架构
  • nGrinder使用嵌入式svn服务器(SVNKit DAV)来管理脚本文件。svn存储库存储在${NGRINDER_HOME}目录中。
  • nGrinder使用EhCache提高DB和SVN存储库的数据检索性能。
  • nGrinder使用Spring Security来保护系统,并使用Atlassian插件框架来实现可扩展性。

如果通过配置system.conf启用集群模式,将nGrinder安装到多台机器上,系统架构将变更如下:


 
nGrinder集群架构
  • 集群中的所有控制器共享同一个DB和文件系统。所有ngrinder控制器都应该指向由NFS共享的${NGRINDER_HOME}文件夹。
  • 每个控制器都可以有自己的特殊属性和日志输出文件夹。这些信息将保存在每个控制器的${NGRINDER_EX_HOME}中。
  • 所有控制器相互复制EhCache,使某些数据在集群中的所有控制器中可见。

每个控制器都可以为nGrinder web内容提供服务,但是根据不同的命名区域处理不同的测试集。默认情况下,我们不提供任何会话集群。因此,您可能会遇到登录问题,因为存储在控制器中的会话不会复制到其他控制器。您可能需要通过引用Tomcat会话集群指南来配置它,或者在L4上使用粘性会话。如果您不是这方面的专家,只需让用户只连接一个控制器即可。

如何配置集群? 查看 集群使用指南

2、安装指南

先决条件

  • nGrinder是web应用程序(控制器)和Java应用程序(代理、监视器)的组合。如果您不知道什么是控制器和代理,请参考 nGrinder简介
    要安装nGrinder控制器和代理,您需要Oracle JDK 1.6~或OpenJDK 1.7~。
  • 如果您的java路径位于路径的开头,请检查PATH环境变量,以便能够运行合适的java。
  • nGrinder使用多个端口与agent及agent进行通信。如果防火墙阻止了一些端口,您应该要求网络管理员打开防火墙中的以下端口。这些端口可以通过配置进行配置。
    • 代理端:Any ==> 控制器:16001
    • 代理端:Any ==> 控制器:12000 ~ 12000+(允许并发测试次数)
    • 控制器:Any ==> 监视器:13243
    • 控制器 ==> 公共用户:这取决于您的tomcat配置。默认情况下,它被设置为8080。

下载

您可以从以下链接下载 nGridner控制器

安装控制器

nGrinder是作为一个自执行web存档文件(WAR)分发的,就像Jenkins一样,您可以将此存档文件放入您熟悉的web应用服务器(如Tomcat)或在命令行中运行包。
!小心,永远不要将war文件放在包含像这样的文件夹的空间中 "C:Program FilesTomcatwebapps"

通过Docker运行

如果你喜欢通过docker运行。请参阅 https://hub.docker.com/r/ngrinder/controller/

作为可执行文件运行

1、请确保您提前正确配置了PATH和JAVA_HOME。
2、使用以下命令运行nGrinder控制器。

java -jar ngrinder-controller-X.X.war

3、然后您将看到以下错误消息。nGrinder需要非常大的PermGen内存,因为它包含很多库,比如SVNKit、maven、Jetty webserver、groovy和python。重新运行ngrinder,并添加PermGen设置。nGrinder需要相当大的perm-gen内存。请使用以下命令运行nGrinder。

java -XX:MaxPermSize=200m -jar  ngrinder-controller-3.4.war

4、默认情况下,nGrinder为web服务器端口使用8080。如果您想使用另一个端口,请指定--port port_number作为参数。

java -XX:MaxPermSize=200m -jar  ngrinder-controller-3.4.war --port 80

5、当执行war文件时,将提取war到 ~/.ngrinder/webapp 目录,并创建多个默认数据文件,比如DBs到.ngrinder目录
6、如果您可以在屏幕上看到以下日志,那么ngridner控制器现在就可以运行了。

INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_22.xml::22::ngrinder.3.3 r
an successfully in 4ms
INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_23.xml::23::ngrinder.3.3 r
an successfully in 7ms
INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_24.xml::24::ngrinder.3.3 r
an successfully in 2ms
INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_25.xml::25::ngrinder.3.3 r
an successfully in 7ms
INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_26.xml::26::ngrinder.3.3 r
an successfully in 8ms
2014-01-20 16:39:30.633:INFO:/:Initializing Spring FrameworkServlet 'appServlet'
2014-01-20 16:39:31.141:INFO::Started SocketConnector@@0.0.0.0:8080

7、然后打开浏览器,进入 http://localhost:8080/

运行在TOMCAT

1、将war文件放到tomcat的webapps文件夹${TOMCAT_HOME}/webapps中。如果您想在没有ngrinder-controller上下文路径的情况下访问ngrinder,您应该将war文件名更改为ROOT.war

2、打开 catalina.sh 或者 catalina.bat ,然后把下面的内容放在文件的开头。

JAVA_OPTS="-Xms600m -Xmx1024m -XX:MaxPermSize=200m"    # for catalina.sh
set JAVA_OPTS=-Xms600m -Xmx1024m -XX:MaxPermSize=200m   # for catalina.bat

3、运行 ${TOMCAT_HOME}/startup.sh 或者 startup.bat
4、打开浏览器访问http://localhost:8080/ngrinder-controller-X.X ,或者如果你将war文件重命名为ROOT.war 则访问 http://localhost:8080

更多

1、nGrinder通过集群多个控制器支持多个区域(运行独立的代理集属于多个网络区域)。参见 控制器集群指南
2、nGrinder有许多可配置选项,可根据每种需求定制nGrinder。参见 控制器配置指南

安装代理端

与以前的nGrinder不一样,nGrinder 3.3 agents是从controller中下载的。下载的代理程序包已经包含连接到控制器的默认代理配置。只要打开tar文件和运行run_agent.sh或者run_agent.bat就能让代理连接到控制器。

1、以admin身份登录。默认的管理密码也是admin。


 
登录界面

2、单击右上角菜单并单击下载代理菜单。


 
下载代理端

因为您是以admin身份登录的,所以可下载的代理包包含允许所有用户共享代理的配置。
如果您以非admin帐户的身份登录,链接将被更改为“下载私有代理”,其中包含允许代理只被当前用户占用的配置。
详情请见私人代理。

3、包含代理的tar存档将很快下载。
在widows系统,tar文件能被7zip提取,或者使用tar xvf tar_file.tar命令

4、解压tar并运行run_agent.shrun_agent.bat。代理将使用以下逻辑执行。
① 检查~/.ngrinder_agent文件夹,可以看到配置(agent.conf)是否存在
② 如果不存在,复制当前文件夹的__agent.conf配置文件到~/.ngrinder_agent/agent.conf和加载它。
③ 如果它存在,只需使用现有配置~/.ngrinder_agent/agent.conf直接运行

5、如果您想用最新的配置覆盖现有的配置,请将-o选项作为参数

run_agent.sh -o # 在 linux/mac 运行
run_agent_bg.sh -o # 在 linux/mac 后台运行
run_agent.bat –o # 在 windows 上运行

6、如果你想停止代理程序。

stop_agent.sh # 在 linux/mac 运行
stop_agent.bat # 在 windows 运行

7、从nGrinder 3.3开始,控制器将自动批准所连接的代理,如果你在控制器中提供下面配置,那您必须自己批准代理。

controller.enable_agent_auto_approval=true

8、要批准代理,请转到代理管理菜单并单击approve按钮。


 
代理管理

9、如果在Linux中运行代理,可能需要配置ulimit以运行多个线程。请检查下面的内容。

> ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30676
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 16000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 32768
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

当你运行ulimit -a时,如果你的机器设置的max user processesopen files很小, 请至少设置到10000以上。打开/etc/security/limits.conf文件,并使用root权限添加一下内容:

your_account soft    nproc           32768
your_account hard    nproc           32768
root         soft    nproc           32768
root         hard    nproc           32768
your_account soft    nofile          16000
your_account hard    nofile          16000
root         soft    nofile          16000
root         hard    nofile          16000

默认情况下,每台机器只支持一个代理。但是,如果希望在一台机器上运行多个代理,则必须配置一些代理选项。请参考 代理配置指南

安装监控器

nGrinder监控器是代理程序包的子集,安装在目标机器中以收集负载下的系统统计信息(如CPU、MEM和网络)。
你也可以从控制器下载监视器。

1、下载监视器。


 
下载监控器

2、然后解压监视器包并运行批处理或shell文件。

run_monitor_bg.sh  # 运行在 linux/mac
run_monitor.bat # 运行在 windows

3、如果要停止监视器,运行以下命令。

stop_monitor.sh # 运行在 linux / mac
stop_monitor.bat –o # 运行在 windows

好了。现在可以运行第一个性能测试了。快速入门

3、管理员指南

第一次访问

根据您如何执行nGrinder,您可能使用不同的URL访问主页。如果你使用java -jar ngrinder-controller-X.X.war运行代理,你可以通过地址 http://localhost:8080
访问首页。

 
nGrinder首页

使用默认帐户登录

nGrinder在第一次运行时创建4个用户。预定义的id如下所示。
每个都有反映其角色的名称。

  • admin, user, superuser, system
  • 初始密码与名称相同

有4种用户类型(称为角色)

角色描述
ADMIN 管理nGrinder系统,包括:用户管理、测试观察、测试报告统计、代理管理等。
USER 测试脚本,然后获取其报告数据文件。
SYSTEM_USER 预留内部使用
SUPER_USER 观察在nGrinder实例中执行的整个测试,但无法配置系统。

要配置系统,您需要使用管理帐户登录。

注意:第一次登录时,请不要忘记更改密码。如果您将帐户保留默认密码,则黑客可以使用nGrinder实例进行DDOS攻击。

代理管理

管理菜单中的代理管理提供了代理操作和监控功能。即使您已经将代理配置为连接控制器,您也需要批准控制器中的每个代理以使其有效。这一步是为了防止试图连接到控制器的异常代理滥用控制器。

 
代理管理菜单

如果你是管理员,上面的菜单应该是可见的。您可以单击代理管理菜单来管理代理。

 
代理管理界面

然后,您应该会看到上面显示的屏幕。这显示了附加代理的状态。如果我们只允许所有代理连接,就会有潜在的风险。因此,nGrinder只使用经过批准的代理商。如果您确认这里列出的代理是OK的,您可以批准它们。有些代理只能用于特定的用户。详情请参阅 用户代理

您可以通过单击每个IP监视代理的性能状态。

 
代理监控

这张图显示了在最后1分钟内每个代理的性能。

在nGrinder 3.3中,agent管理页面包含了agent自动更新功能。有关详细信息,请参阅 代理自动更新

用户管理

管理员可以通过用户管理菜单创建/删除和修改用户。每个用户也可以修改自己的配置文件。

 
用户管理

脚本控制台

 
脚本控制台

这是一个常用的调试管理工具。管理员可以输入Groovy代码来监视和控制nGrinder内部状态。例如:

println(agentManager.getAllAttachedAgents())

默认情况下禁用此功能。要启用脚本控制台,请在系统配置中放入以下选项。

controller.enable_script_console=false

知道在脚本中可以引用什么是很重要的。下面的变量是可用的。

  • applicationContext (org.springframework.context.ApplicationContext)
  • agentManager (org.ngrinder.perftest.service.AgentManager)
  • agentManagerService (org.ngrinder.agent.service.AgentManagerService)
  • regionService(org.ngrinder.region.service.RegionService)
  • consoleManager (org.ngrinder.perftest.service.ConsoleManager)
  • userService (org.ngrinder.user.service.UserService)
  • perfTestService (org.ngrinder.perftest.service.PerfTestService)
  • tagService(org.ngrinder.perftest.service.TagService)
  • fileEntryService (org.ngrinder.script.service.FileEntryService)
  • config (org.ngrinder.infra.config.Config)
  • pluginManager (org.ngrinder.infra.plugin.PluginManager)
  • cacheManager(org.springframework.cache.CacheManager)

请参考nGrinder javadoc以了解可用的类和方法。

日志监控

有时,查看服务器日志以确定问题并向开发人员发送错误报告是很重要的。代替了tomcat的默认日志catalina.out,nGrinder拦截日志系统并写入日志文件 ${NGRINDER_HOME}/logs/ngrinder.log 。您可以在日志监视菜单中看到当前打印日志。每5秒钟刷新一次,以显示最新可用日志。

日志监控在非集群模式下可用。

 
日志监控

测试策略

有时候,您需要配置整个测试执行策略。例如,您可以设置每个测试可以使用的代理的最大计数。或者您可以限制测试的最大并发数,以最小化网络负载。可以通过${NGRINDER_HOME}/system.properties文件进行配置。

4、控制器配置指南

本章描述了高级nGrinder控制器配置。如果您不是系统管理员,您可能不需要阅读本指南。然而,如果您想将nGrinder作为PAAS运行,您应该阅读这一章。

控制器首页

${NGRINDER_HOME}

当nGrinder控制器启动时,nGrinder将创建 ${user.home}/.ngrinder 目录到用户的主目录。此目录包含默认配置文件和数据。下面是.ngrinder目录的默认位置。

  • Window:C:Users${user.home}.ngrinder
  • Unix/Linux :${user.home}/.ngrinder

但是如果您想为主目录分配其他目录,请设置环境变量 ${NGRINDER_HOME} 在运行ngrinder之前,您可以在命令行中执行 --ngrinder-home HOME_PATH

java -XX:MaxPermSize=200m -jar  ngrinder-controller-X.X.war --ngrinder-home /home/user/ngrinder

如果您想运行多个nGrinder控制器(每个控制器只处理一个网络区域)并使它们作为一个(集群模式)工作,您应该让所有控制器共享相同的${NGRINDER_HOME}。这通常使用NFS来完成控制器目录共享。有关详细信息,请参阅 集群体系结构

${NGRINDER_EX_HOME}

${NGRINDER_EX_HOME}用于在集群模式中每个特定的控制器。默认情况下,它被设置在~/.ngrinder_ex

${NGRINDER_HOME}不同,${NGRINDER_EX_HOME}在nGrinder启动时不会自动创建。

  • Window : C:Users${user.home}.ngrinder_ex
  • Unix/Linux :${user.home}/.ngrinder_ex

${NGRINDER_EX_HOME}不是多个控制器共享的主题。每个控制器都可以有自己的扩展home。用户可以添加额外的系统配置在${NGRINDER_EX_HOME}/system.conf

控制器首先从 ${NGRINDER_HOME}/system.conf 加载系统配置,然后,它将尝试从 ${NGRINDER_EX_HOME}/system.conf ,并将其覆盖 ${NGRINDER_HOME}/system.conf上的系统配置。

例如:cluster.region配置可以设置在每个集群成员的${NGRINDER_EX_HOME}/system.conf 文件中。当${NGRINDER_EX_HOME}目录存在,且控制器在集群模式下启动,控制器将输出日志到 ${NGRINDER_EX_HOME}/logs/ngrinder_{region_name}.log文件中。

命令行参数

基础

如果你运行一个没有WAS的控制器。您可以在CLI接口上提供多个选项。

名称示例重载属性描述
-p / –port -p 80   服务器的HTTP端口。默认端口是:8080
-c / --context-path -c ngrinder   控制器的Web上下文路径。默认的上下文路径是""。例如,如果您在这里提供"ngrinner",访问url将是"http://localhost:8080/ngrinder"
-cm / --cluster-mode -cm easy cluster.mode 集群模式。有三个可用的选项(none/easy/advanced)。默认值为none
-nh / --ngrinder-home -nh ~/ngrinder ngrinder.home home路径,默认:~/.ngrinder
-exh / --exhome -ex ~/ngrinder_ex ngrinder.exhome 扩展的home路径,默认:~/.ngrinder_ex
-h / --help / –? -h   帮助文档
-D -Ddatabase=cubrid &database_url=blar can override all 动态属性。这个选项可以覆盖 database.confsystem.conf 的所有配置

单应用模式

如果在非集群模式下运行ngrinder(这意味着您根本没有提供“-cm”选项),则可以使用以下附加选项。

名称示例重载属性描述
-cp / --controller-port -cp 9000 controller.port 代理连接的控制器端口。

简单的集群模式

一些公司使用多个idc,它们需要集群(单个nGrinder实例中的多区域支持)特性。然而,3.3版本前的nGrinder要求网络文件系统共享${NGRINDER_HOME}和Cubrid,以使多个控制器拥有相同的DB。通过允许在一台机器上安装多个控制器并允许H2 TCP服务器连接,我们取消了这些限制。为了理解容易的集群,我们强烈建议阅读我们的 简单集群指南

您可以通过以下命令以集群模式轻松的运行控制器。

java -XX:MaxPermSize=200m -jar  ngrinder-controller-X.X.war -cm easy

以下是必选项

名称示例重载属性描述
-clh / --cluster-host -clh 200.1.22.3 cluster.host 当前区域的代理连接的控制器ip或主机名。
-clp / --cluster-port -clp 10222 cluster.port 此集群成员的集群通信端口。每个集群成员都应该使用唯一的集群端口运行
-cp / --controller-port -cp 9000 controller.port 代理连接的控制器端口。每个集群成员都应该使用唯一的控制器端口运行。
-r / --region -region NORTH cluster.region 区域名称。每个集群成员应该使用唯一的区域名称运行。
-dt / --database-type -dt h2 database.type 数据库类型。有h2和curbrid。
-dh / --database-host -dh localhost database.host 数据库主机名。默认值是localhost
-dp / --database-port -dp 9092 database.port 数据库端口号。当cubrid被选中时,默认值是33000;h2被选中,默认值是9092

高级集群模式

java -XX:MaxPermSize=200m -jar  ngrinder-controller-X.X.war -cm advanced

高级集群模式没有任何选项。它只是激活集群模式,然后从集群配置${NGRINDER_HOME}/system.conf 或者 ${NGRINDER_EX_HOME}/system.conf 文件中获取。

配置

当控制器启动时,它将默认配置复制到${NGRINDER_HOME}中。您可以修改它们来设置控制器。

${NGRINDER_HOME}/database.conf

  • 这里包含数据库配置。您可以在需要使用Cubrid时修改此文件。默认情况下,nGrinder使用H2作为数据库。
database=H2
database_username=admin
database_password=admin

如果你只设置以上选项,H2将${NGRINDER_HOME}/db/h2.db创建DB,以嵌入式模式运行。在这种情况下,没有其他进程在运行时不能访问这个数据库。

如果您在服务器模式下运行H2,而不是在自己的嵌入式模式下运行。您还应该提供数据库连接URL。

database_url=tcp://{your_h2_server_host_ip_or_name}:{the_h2_server_port}/db/ngrinder

如果您喜欢使用Cubrid,您需要设置以下配置。

database=cubrid
database_url={your_cubrid_host_ip_or_name}:{cubrid_port_maybe_33000}:{dbname}
database_username=admin
database_password=admin

注意:如果您想使用Cubrid DB高可用性特性。请按照指南在cubrid中启用HA,并在database.conf添加备选的db地址。

database_url_option=&althosts={you_cubrid_secondary_host_ip_or_name}:{cubrid_port_maybe_33000}

#### ${NGRINDER_HOME}/system.conf

##### Generic
- This contains controller configurations.
- You can modify these settings to calibrate the controller’s behavior.

|Key|Default|Compatible Keys (for ~nGrinder 3.2.X)|Description|
|---|-------|-------------------------------------|-----------|
|controller.verbose|false|verbose|Set true to see the more detailed log.|
|controller.dev_mode|false|testmode|Set true to run controller in dev mode. In the dev mode, the log goes to the default output(such as catalina.log in Tomcat) not ${NGRINDER_HOME}/logs/ and the security mode and cluster config verification are disabled. In addition, "agent force update" and "agent auto approval" is enabled. finally the script console is activated as well.|
|controller.demo_mode|false|demo|Set true to run controller in the demo mode. In the demo mode, each use does not allow to change the user password.|
|controller.security|false|security|Set true if security mode should be enabled. In the secutiry mode, nGrinder SecurityManager will be activated and limit the each test’s access to underlying resources/network in the agent. Please refer [Script Security](script-security)|
|controller.user_password_sha256|false|ngrinder.security.sha256|By default, nGrinder uses sha1 to encode passwords. If you like to use sha256, please set this true. However, you need to delete out all databases completly to apply the this configuration.|
|controller.usage_report|true|usage.report|Set false if you don't want to report ngrinder usage to google analytics. |
|controller.plugin_support|true|pluginsupport|Set false if the plugin should be de-activated. This is not the option applied on the fly. You need to restart the controller.|
|controller.user_security|false|user.security|Set true if you want to make some of the user profile fields(email, mobile phone) mandatory.|
|controller.allow_sign_up|false| |Set true if some users should be able to sign them by themselves. See [TBD](tbd)|
|controller.max_agent_per_test|10|agent.max.size|The maximum number of agents which can be attached per one test. This option is useful when you like to make nGrinder shared by many users. This configuration makes each test use only limited number of agents. For example, if you have 15 agents in total and you set 5 here, you can guarantee 3 users can run performance tests concurrently.|
controller.max_vuser_per_agent|3000|agent.max.vuser|The maximum number of vusers which can be used per one agent. In nGrinder, the vuser count means the total thread count. This should be carefully selected depending on the agent memory size. If you have the 8G RAM and 4 core agent, maybe the more than 10000 vusers can be executable. See TBD for our benchmark result.|
|controller.max_run_count|10000|agent.max.runcount|The maximum test run count for one thread. If you set this 10,000 and run 100 threads per an agent, the test can be executed 10,000 * 100 times at maximum.|
|controller.max_run_hour|8|agent.max.runhour|The maximum running hour for one test.|
|controller.max_concurrent_test|10|ngrinder.max.concurrenttest|The count of allowed maximun concurrent tests. If the more tests than specified here are started, some of them will be wating in the run queue.|
|controller.monitor_port|13243|monitor.listen.port|The monitor connecting port. The default value is 13243. When a perftest starts, the controller try to connect to the monitor in the specified target hosts for system statistics.|
|controller.url|auto-matically selected|ngrinder.http.url http.url|Controller URL (such as http://ngrinder.mycompany.com). This is used to construct the host name part of URL in the controller(such as SVN Link). If not set, the controller analyzes user request to represent URL text in the web page.|
|controller.controller_port|16001|ngrinder.agent.control.port|The port number to which each agent connects in the connection phase.|
|controller.console_port_base|12000|ngrinder.console.portbase|The base port number to which agents in the each test connects in the testing phase. If you allowed 10 concurrent tests by controller.max_concurrent_test=10 option, the ports from 12000 to 12009 are used for agents to connect the controller in the testing phase. You need to restart nGrinder to apply the this configuration.|
|controller.ip|all available IPs|ngrinder.controller.- ipaddress ngrinder.controller.ip|By default, the empty controller.ip configuration makes the controller bind to all available IPs in the current machine so that it can allow agents to be connected to all controller’s IP. Generally, It causes no problem. However, in the specialized env(such as EC2), more than 2 IPs(one for inboud and the other or outbound) are assigned. If you want to allow only one IP to be connected by the agent, you should put it here.|
|controller.validation_timeout|100|ngrinder.validation.timeout|Script validation timeout in the unit of sec. Increase this when you have the script which takes more than 100 secs for a single validation.|
|controller.enable_script_console|false| |true if the script console should be activated. Script console provides the way to directly access ngrinder internal.|
|controller.enable_agent_auto_approval|true| |false if the agent should be approved before using it. This option is useful when ngrinder is provided as PAAS.|
|controller.front_page_enabled|true| |Set false if the controller doesn’t have the internet access. this disables periodic RSS feed access to developer resources and QnAs.|
|controller.front_page_resources_rss|…|ngrinder.frontpage.rss|RSS URL for "Developer Resources" panel in the front page.|
|controller.front_page_resources_ more_url|…| |"More" URL for "Developer Resources" panel in the front page.|
|controller.front_page_qna_rss|…|ngrinder.qna.rss|RSS URL for "QnA panel" in the front page.|
|controller.front_page_ qna_more_url|…| |"More" URL for "Developer Resources" panel in the front page.|
|controller.front_page_ask_question_url|….|ngrinder.ask.question.url|"Ask a question" URL for "QnA panel" in the front page.|
|controller.help_url|…|ngrinder.help.url|The top most HELP link URL.|
|controller.default_lang|en|ngrinder.langauge.default|The default language if the user didn’t specify the langauge during login . This option is useful when you installs custom SSO plugin.|
|controller.admin_password_reset|false| |true if the admin password should be reset as "admin" while booting up. This option is useful when the admin lost its password. You should make it false after setting the admin password.|
|controller.agent_force_update|false| |true if the agents should always be updated when the update message is sent.  If it’s enabled, update will be performed even when the agent has later version than the controller’s.|
|controller.update_chunk_size|1048576| |The byte size of agent update message. by default, it’s set as 1048576(1MB). Agent update message contains the fragment of agent page and are sent to agents multiple times. If it’s bigger, the count of consequent messages are smaller so that it will be more speedy.|
|controller.safe_dist|false|ngrinder.dist.safe.region|true if you want to always enable the safe script transmission. If it is turned on, the each perf test starting speed will be slower but files are gurantee to be transmitted without errors.|
|controller.safe_dist_threshold|1000000|ngrinder.dist.safe.threashhold|If the files are bigger, the transmission error possibility is increased as well. nGrinder automatically enable safe script transmission by looking the file size. If you want to disable this, please make it 100000000.|

##### Cluster-Related Configurations
This file can have serveral cluster mode related options as well. Because ${NGRINDER_HOME}/system.conf should be shared by multiple controllers via NFS,
some cluster related configurations which applies to all controllers in the cluster can be located here for easy administration.  
Followings are the options.

|Key|Default|Compatible Keys (for ~nGrinder 3.2.X)|Description|
|---|-------|-------------------------------------|-----------|
|cluster.enabled|false|ngrinder.cluster.mode|true if the cluster mode should be activated.|
|cluster.mode|none| |easy if you want to run the multiple controllers in a single machine.|
|cluster.members|-|ngrinder.cluster.uris|Comma or semi-colon separated list of all cluster member’s IP. For example) - 192.168.1.1;192.168.2.2;192.168.3.3|
|cluster.port|40003|ngrinder.cluster.listener.port|cluster communication port. When it’s the easy mode, each controllers in a cluster should have unique cluster port. However it’s the advanced mode, all cluter should have the  same cluster port.|

#### ${NGRINDER_EX_HOME}/system.conf
As we described here, ${NGRINDER_EX_HOME} is used to provide the specialized configuration per each controller in the cluster mode.  You can add additional system.conf file here as well and define several per controller configurations.

If you run controller in the single mode or easy cluster mode, you don’t need to create this file at all. However if you run controller in the advanced mode, you may need following configurations in ${NGRINDER_EX_HOME}/system.conf file.

|Key|Default|Compatible Keys (for ~nGrinder 3.2.X)|Description|
|---|-------|-------------------------------------|-----------|
|cluster.port|40003|ngrinder.cluster.listener.port|cluster communication port. When it’s the easy mode, each controllers in a cluster should have unique cluster port.  However it’s the advanced|
|cluster.host|-|cluster.ip|Console binding IP of this region. If not set, console will be bound to all available IPs.|
|cluster.region|NONE|ngrinder.cluster.region|The region name of this cluster member.|
|cluster.hidden_region|false|ngrinder.cluster.region.hide|true if you want to make this controller invisible from cluster members. This is useful when you like to run a private controller for administration.|
|cluster.safe_dist|false|-|true if tje file transmission in this region should be done by safer way.|

#### ${NGRINDER_HOME}/process_and_thread_policy.js
This file defines the logic to determine the appropriate combination of processes and threads for the given count of vusers.  
This file provides the flexible way to configure the appropriate processes and threads. Users usually don’t know which process and thread combination can result the best performance. Therefore, nGrinder let a user just input expected vuser per agent and configure the process and thread count automatically.  
The default logic is like following.
```javascript
function getProcessCount(total) {
    if (total < 2) {
        return 1;
    }

    var processCount = 2;

    if (total > 80) {
        processCount = parseInt(total / 40) + 1;
    }

    if (processCount > 10) {
        processCount = 10;
    }
    return processCount;
}

function getThreadCount(total) {
    var processCount = getProcessCount(total);
    return parseInt(total / processCount);
}

默认情况下,不允许超过10个进程,当使用80个vusers时,每个进程分配的线程数超过40个。

您可以自由地重写这个方法(getProcessCount() / getThreadCount())以满足你的需要。

${NGRINDER_HOME}/grinder.properties

这个文件定义了默认的"Grinder"行为。有些在运行时被nGrinder重载,有些则不然。在大多数情况下,管理员不需要更改这个文件。
详情请参阅 http://grinder.sourceforge.net/g3/properties.html

插件

该文件夹包含插件。如果您想安装新的插件(~~.jar)或升级现有的插件,只需将它们放入这个文件夹。它们将被自动扫描和激活。如果你想删除插件,只要从那里删除插件文件。例如:你可以找到可用的插件TBD。

主文件夹结构

${NGRINDER_HOME}中,有一些文件夹用于存储nGrinder中使用的数据。以下是对它们的描述。

文件夹名称描述
logs 这里存储nGrinder的日志. nGrinder拦截tomcat日志并保存日志到ngrinder.log文件。此日志只包含与控制器相关的日志。您还可以通过admin菜单监视这个文件的内容。
perftest 此文件夹存储与每个性能测试相关的数据。
download 此文件夹包含可下载的文件,如agent和monitor。例如,如果您想重新创建代理和监视器包,您可以删除该文件夹中的所有内容。
plugins 这个文件夹包含插件。如果您想安装新的插件(~~.jar)或升级现有的插件,只需将它们放入这个文件夹。它们将被自动扫描和激活。
repos 此文件夹包含每个用户的svn存储库。
script 此文件夹包含与脚本验证相关的资源。这只在执行验证时使用。
db 此文件夹包含H2数据库数据。
subversion 此文件夹包含底层svnkit的默认配置。
webapp 当控制器的web应用程序文件在嵌入式web服务器上执行时,该文件夹包含控制器的web应用程序文件。
5、集群指南

简单集群指南

nGrinder 3.3中,nGrinder支持“简易”集群模式,允许多控制器在一台机器上运行。因为它们在一台机器上运行,所以不需要为 ${NGRINDER_HOME} 提供网络文件系统。运行中的控制器将与本地 ${NGRINDER_HOME} 一起工作。请遵循以下步骤:

运行H2 TCP服务器

1、下载H2并解压。
2、运行H2 TCP服务器。binh2.bat 或者 bin/h2.sh

运行控制器

1、运行控制器指向不同的web(-p)/集群(-clp)/控制器(-cp)端口和区域名称(-r)。如果它们被over-wrapped,控制器就会因为端口冲突而无法运行。

java -jar -XX:MaxPermSize=200m -jar ngrinder-controller-X.X.war -p 8080 -cm easy -clp 10010 -r region1 -cp 9001      

java -jar -XX:MaxPermSize=200m -jar ngrinder-controller-X.X.war -p 8081 -cm easy -clp 10011 -r region2 -cp 9002       

java -jar -XX:MaxPermSize=200m -jar ngrinder-controller-X.X.war -p 8082 -cm easy -clp 10012 -r region3 -cp 9003   

有关CLI选项,请参阅 控制器配置指南

2、访问其中一个web端口并登录,如: http://localhost:8080/

3、检查区域是否激活,所有区域都已启动。

运行代理

1、您可以下载并运行每个区域的代理。点击下载代理>区域名称,如上图所示。这将下载已经配置到指定区域的代理。
2、在单独的机器上解压
3、然后运行 run_agent.sh -o 或者 run_agent.bat -o
4、如果您想在一台机器上运行多个代理,请参阅 代理配置指南

高级集群指南

从3.1版本开始就支持此特性。

  • 下面解释了NFS和Cubrid的高级集群配置。
  • 如果您想不费多大力气就运行集群,请参考 简单集群指南

如果您不了解nGrinder集群,请参考以下 集群架构 如何设置nGrinder集群模式。所有的nGrinder控制器都应该在集群模式下使用相同的DB和文件系统。首先,我们应该在NFS上创建一个共享文件夹,并让所有控制器将其指向${NGRINDER_HOME}。和编辑${NGRINDER_HOME}/system.conf如下:

# 如果您想启用ngrinder控制器集群。下面请启用。
ngrinder.cluster.mode=true
# 控制器ip列表
ngrinder.cluster.uris=xx.xx.xx.xx;xx.xx.xx.xx
# 缓存集群侦听器端口。
ngrinder.cluster.listener.port=40003

下一步是创建每个控制器的特定信息。${NGRINDER_EX_HOME}/system-ex.conf的使用与${NGRINDER_HOME}不同,${NGRINDER_EX_HOME}不是nGrinder自动创建的。因此,您应该使它在本地文件系统中不被其他控制器共享。创建${NGRINDER_EX_HOME}/system-ex.conf文件,并在此处指定区域名称。读取此配置的控制器将充当指定的区域控制器。

# 这个控制器的区域设置。
# 在集群模式下运行nGrinder时,${NGRINDER_HOME}应由其他控制器共享。
# 我们希望通过在NFS上运行${NGRINDER_HOME}来实现这一点。
# 然而,区域设置不能设置在${NGRINDER_HOME}上,因为集群中的每个控制器都必须有自己的配置。
# 因此,nGrinder支持多一个配置存储文件夹${NGRINDER_EX_HOME}
# 请配置下面的文件 ${NGRINDER_EX_HOME}(默认 ${user.home}/.ngrinder_ex)/system-ex.conf
ngrinder.cluster.region=Beijing

完成此配置后,只需重新启动所有nGrinder控制器并再次登录。我们会在标题栏看到这个图标!

 
集群图标

如果您想将L4或负载均衡器放在所有控制器前面,您应该将其设置为粘性会话,以便每个客户机只连接一个控制器。否则,用户可以在访问差值控制器时再次登录。

在控制器配置之后,还应该将区域名称设置为所有代理。我们应该在每个代理中设置连接控制器IP。现在有几个控制器。因此,您应该根据您希望此代理服务的区域选择其中之一。您不仅需要添加连接控制器IP,还需要添加此控制器处理的区域名称。

agent.console.ip=controller ip
agent.console.port=controller port
agent.region=controller region name

如果这个代理是用户代理,它应该是:

agent.console.ip=controller ip
agent.console.port=controller port
agent.region={controller region name}owned{userID}


6、代理配置指南

本章描述了nGrinder 3.3或更高版本的高级nGrinder代理配置。如果您个人使用nGrinder,您可能不需要阅读本指南。然而,如果您想将nGrinder作为PAAS运行,您应该阅读这一章。

从Controller下载代理

从nGrinder 3.3中,代理安装包没有再分发到sourceforge。但它可以从控制器下载。这使得代理配置发生了巨大的变化。控制器已经知道应该如何配置代理,它提供包含适当配置的代理包。例如,当管理员用户下载代理时,代理包包含通用配置。但是,如果一般用户下载包,代理包将包含 私有代理 配置。

如果您喜欢使用wget下载代理,也可以直接使用以下url。

控制器模式是否共享下载地址
单机 共享 http://{controller_host_name}/agent/download
  私有 http://{controller_host_name}/agent/download?owner={user_id}
集群 通用 http://{controller_host_name}/agent/download?region={region_name}
  私有 http://{controller_host_name}/agent/download/{region_name}/{user_id}

如果您在helloworld.com中安装了集群控制器,并且希望下载“hello”用户和“region1”区域的私有代理,那么可以使用以下URL下载。

wget http://helloworld.com/agent/download/region1/hello

如果您不喜欢合成URL,只需在浏览器中复制链接并粘贴它。

预设置配置在代理程序包中存储为./__agent.conf文件。当代理启动时,如果此文件不存在,这__agent.conf文件将被复制到${NGRINDER_AGENT_HOME}/agent.conf中。如果已经有${NGRINDER_AGENT_HOME}/agent.conf,代理将只显示警告消息并跳过复制操作。然后会执行旧的agent.conf

如果你想用__agent.conf覆盖原来的agent.conf,您应该运行-o选项的代理,该选项强制覆盖 agent.conf

代理启动/停止

nGrinder代理有几个命令行shell。您可以运行其中一个进程来调用或终止代理进程。

  1.  
    run_agent.sh # 或者 run_agent.bat 使用这个启动代理。
  2.  
    run_agent_bg.sh # 用这个在linux的后台启动代理。
  3.  
    stop_agent.sh # 或者 stop_agent.bat 使用此命令停止当前正在运行的代理。

代理家目录

当代理启动时,它将在用户的主目录创建 ${user.home}/.ngrinder_agent 目录。此目录包含默认配置文件和数据。下面是.ngrinder_agent文件夹的默认位置。

  • Window:C:Users${user.home}.ngrinder_agent
  • Unix/Linux:${user.home}/.ngrinder_agent 但是如果您想为主目录分配另一个目录,在运行代理前,请设置环境变量${NGRINDER_AGENT_HOME} ,或者命令行运行时添加 --ngrinder-agent-home NGRINDER_AGENT_HOME 或者 -nah NGRINDER_AGENT_HOME 。
./run_agent.sh --ngrinder-agent-home /home/user/ngrinder_agent

在一台机器上运行多个代理程序

如果您想在一台机器上运行多个代理,您应该在以下条件下运行代理。

1、使用不同的安装包
2、使用不同的--agent-home,使用不同的--host-id

为了满足上面的约束,您可以像下面这样运行代理。

1、尽可能多地安装多个代理二进制文件

  • 第一: ~/apps/ngrinder_agent_1
  • 第二: ~/apps/ngrinder_agent_2

2、使用以下命令运行每个代理

  • 第一: cd ~/apps/ngrinder_agent-1; ./run_agent.sh --agent-home ~/.ngrinde-agent-1 --host-id first-agent
  • 第二 : cd ~/apps/ngrinder_agent-1; ./run_agent.sh --agent-home ~/.ngrinde-agent-2 --host-id second-agent

命令行选项

nGrinder代理的run_agent.sh命令,传入多个参数,可以覆盖现有配置${NGRINDER_AGENT_HOME}/agent.conf

名称示例覆盖属性描述
-o, --overwrite-config -o - 如果你想使用__agent.conf覆盖现有的${NGRINDER_AGENT_HOME}/agent.conf配置。 当您希望现有代理连接到其他控制器时,这是非常有用的。
-ah / –agent-home -ah ~/.ngrinder-agent1 ngrinder.agent.home 代理家目录路径. 默认:~/.ngrinder_agent
-ch / --controller-host -ch 10.10.10.10 agent.controller_host 连接此代理的控制器主机名或IP。如果没有指定,则会使用${NGRINDER_AGENT_ HOME}/agent.confagent.controller_host的值。
-cp / --controller-port -cp 10023 agent.controller_port 控制器端口号。如果没有指定,则会使用${NGRINDER_AGENT_ HOME}/agent.confagent.controller_port 的值。
-r / --region -r region_owned_myid agent.region 控制器的区域名称。如果是私人代理, 它应该是{region_name}owed{userid}。如果控制器不是集群模式,您可以忽略它{region_name}
-hi / --host-id -hi my_agent_1 agent.host_id 代理的host id。如果没有提供,则自动选择主机名。
-s / --silent -s common.silent_mode 使代理只输出非常重要的消息
-v / --version -v   显示代理的版本号并退出。
-D -D 全部覆盖 动态属性。此选项可以覆盖agent.conf定义的所有配置
-h / --help -h   帮助文档

配置

当代理启动时,它将复制控制器提供的配置到${NGRINDER_AGENT_HOME} 。如果已经有这样的配置,它会发出警告消息并跳过复制过程。 agent.conf包含代理运行是的基本配置。如果提供了命令行选项,则提供的选项将覆盖指定此文件的某些配置。

${NGRINDER_AGENT_HOME}/agent.conf

默认值兼容的键 (for ~nGrinder 3.2.X)描述
common.start_mode agent start.mode 运行代理的模式。这里可以使用agent和monitor。您根本不需要指定它。
common.verbose false verbose 如果为true,则输出详细日志到${NGRINDER_AGENT_HOME}/log/agent.log文件。
common.silent_mode false - 设置为true, 日志只输出重要内容。
agent.controller_host localhost agent.controller.ip, agent.console.ip, agent.controller_ip 连接此代理的控制器主机名或IP。
agent.controller_port 16001 agent.controller.port, agent.console.port 控制器端口号。
agent.region -   控制器的区域名称。如果是私人代理,它应该是 {region_name}owed{userid}这样的。如果控制器不是集群模式,你可以忽略它{region_name}
agent.host_id localhost’s hostname agent.hostid 代理host id。如果没有提供,则自动选择主机名。
agent.server_mode true   在代理的进程中运行,如果你想删除 –server vm 选项,设置为false
agent.all_logs false agent.send.all.logs 如果您想在测试完成时将所有代理的进程日志发送给控制器,则为true。默认情况下,它只发送一个进程的日志,以避免无用的重复信息。
agent.limit_xmx true   如果你想让每个测试的进程都能使用1GB内存,设置为false。默认情况下,代理进程不能使用超过1GB的内存,因为更多的内存意味着更长的垃圾收集时间。
agent.java_opt - agent.javaopt 提供附加的java vm选项,这些选项将在运行每个测试过程时使用。
agent.keep_logs false   如果您想在测试完成后仍然保留测试日志,则设置为真。默认情况下,它会在每次测试结束时删除所有日志。

代理主文件夹结构

在 ${NGRINDER_AGENT_HOME}中,有一些文件夹用于存储代理中使用的数据。以下是对它们的描述。

Folder NameDescription
log 这存储代理日志。
file-store 这里包含每个用户最后使用的脚本和资源。为了加速文件分发,即使在每次测试结束后都将文件作为缓存保存在这里,也不会删除这些文件。
native 这包含用于收集代理系统使用情况的本机库。
 
 
 
7、代理自动更新指南

从nGrinder 3.3中,代理可以通过控制器的update命令进行自更新。本指南展示了如何更新代理。

如果您正在使用nGrinder 3.3或更高版本的控制器和代理,当您需要将代理更新到新版本时,您不需要将telnet客户机打开到每个代理机器。按照下面的步骤。

1、只需进入代理管理页面。您可以看到附件中的代理列表。
2、选择要更新的代理并单击“更新”按钮。当更新进行时,左边的球将会被损坏。
3、更新将在20~40秒后完成。请确保您的代理状态再次准备好。

只有在满足以下约束条件时,代理更新才可行。

1、每台机器只运行一个代理。
当您在一台机器上使用相同的代理命令运行了两个以上的代理时,update命令将影响这两个代理。它使更新处理变得混乱。
为了避免这种情况,您应该按顺序单击每个代理的更新按钮,或者将代理安装在一台机器的不同文件夹中。

2、控制器版本应该高于代理版本。
如果发送以前的版本,代理将忽略更新命令。所以一定要确保你的控制器是后期版本。

3、已安装代理的版本应该是3.3或更高版本。
3.3版本之前的代理不会更新。您应该自己重新安装这些代理。

8、私有代理

用户可能希望使用多于可用的代理。例如,可能已经预先安装了10个代理,但是如果admin将每个测试的最大代理设置为5,那么用户不能使用所有10个代理。管理员应该增加最大代理值吗?如果admin将每个测试的最大代理增加到10,实际的当前测试可能只使用1,其他普通用户将不得不等待该用户完成测试。

nGrinder通过提供用户代理来解决这个问题。如果特定用户将自己的代理附加到安装在空闲机器上的控制器上,则这些代理仅用于给定用户。因此,如果max代理是5,而用户提供了5个特定于用户的代理,那么他或她可以运行10个代理。

如果您运行nGrinder 3.3并以非管理员帐户登录,您将在菜单中看到以下链接。


 
nGrinder私有代理

“HELLO”表示它将下载连接到HELLO区域的私有代理。这将下载当前用户的私有代理。

这个下载的私有代理已经包含了代理充当私有代理的配置。因此你所需要做的就是运行

# -o 选项使用配置(__agent.conf)去覆盖已存在的配置。
run_agent.sh -o

如果你用的是 nGrinder 3.2.X 版本,您需要自己设置配置。下面介绍如何设置用户自己的代理。

1、在用户自己的机器上安装nGrinder代理,参考 nGrinder安装指南

2、打开~useraccount/.ngrinder-agent/agent.conf文件

  • 在单机模式,按以下设置
agent.console.ip=controller ip
agent.console.port= controller port
agent.region={anykeyword}owned{yourid}
  • 在集群模式下,按以下设置
agent.console.ip=controller ip
agent.console.port= controller port
agent.region={controller region}owned{yourid}

3、运行代理程序

4、请admin批准这些代理。在管理员批准之前,用户无法看到这些代理。

最后,您将拥有用户自己的代理。

原文地址:https://www.cnblogs.com/ceshi2016/p/13846290.html