gatling 是什么呢?在这里我直接引用官方的原话,翻译来自于 chrome 右键翻译😸
Gatling是一种功能强大的负载测试工具。其设计目的是易于使用,可维护性和高性能。
开箱即用的Gatling对HTTP协议提供了出色的支持,使其成为负载测试任何HTTP服务器的首选工具。由于核心引擎实际上与协议无关,因此完全有可能实现对其他协议的支持。例如,加特林(Gatling)当前还提供了JMS支持。
拥有场景在代码中定义,并有效利用资源这是两个要求,这促使我们创造加特林。基于表达性DSL,场景是不言自明的。它们易于维护,可以保存在版本控制系统中。
只要基础协议(例如HTTP)可以以非阻塞方式实现,Gatling的体系结构就是异步的。这种体系结构使我们可以将虚拟用户实现为消息而不是专用线程,从而使它们非常便宜。因此,运行数千个并发虚拟用户不是问题。
gatling 是使用 scala 开发的一款压测工具,所以 gatling 不光需要 java 的语言环境还需要 scala 的语言环境。Gatling 支持带有 HotSpot 的 64 位 OpenJDK 8 和 OpenJDK 11。不支持其他 JVM,例如 JDK 12+,客户端 JVM,32 位系统或 OpenJ9。除了这些之外,从 gatling 3.0 开始,gatling 还需要 Scala 2.12。gatling 与 Scala 2.11 或 Scala 2.13 不兼容。
Gatling 目前有两个版本,为开源版和收费的企业版,企业版相对来说功能更加完善,使用方便并且可自定义报表和支持分布式部署,但是相对来说成本较大,所以这里我选择免费的开源社区版。我把发送请求的服务器称作为 施压机
或者 施压服务器
,施压机的系统我选择为 Centos,使用 linux 服务器在远程操控上会更加轻松。gatling 的社区版提供了两种安装方式,第一种是在官网上下载完全包 传送门 下载后解压完即可运行,所有依赖文件在项目目录下的 lib 中
第二种方式可以使用生成工具,Gatling 提供了一个名为 gatling-maven-plugin 的官方 maven 插件,但是必须在 pom.xml 中添加以下部分。该插件可让您编译 Scala 代码并启动 Gatling 工具。官方安装链接
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>MANUALLY_REPLACE_WITH_LATEST_VERSION</version>
<configuration>
<jvmArgs>
<jvmArg>-Xss100M</jvmArg>
</jvmArgs>
<args>
<arg>-target:jvm-1.8</arg>
<arg>-deprecation</arg>
<arg>-feature</arg>
<arg>-unchecked</arg>
<arg>-language:implicitConversions</arg>
<arg>-language:postfixOps</arg>
</args>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我一般使用 IDE 可以快速的构建 Gatling 项目,在 idea 中新建 maven 项目 选择 create from archetype 然后点击添加 archetype 按图中填写以下内容io.gatling.highcharts:gatling-highcharts-maven-archetype:3.3.0
,可以快速创建 gatling 版本为 3.3.0 的 gatling 项目
随后按步骤创建 maven 项目,创建完成后会自动生成 galing 的项目目录
在文章中我们有说的 Gatling 是一个小巧的开箱即用的工具,其实对 gatling 来说,在系统中拥有 java 环境既可以执行了,为什么我还会单独列出来一个章节来叙述 gatling 的环境准备呢?
因为在使用 gatling 时会消耗大量的打开文件句柄,但是通常操作系统会限制此数量,因此我们需要调整一些系统中的选项,是我们在压测过程中可以达到更大的并发数,不会因为文件句柄问题导致压测出现问题。
相关文章推荐:
Linux 内核参数调优
Linux 系统内核性能调优
打开文件限制
大多数操作系统都可以使用该命令更改打开文件限制。例:ulimit -n
ulimit -n 65536
但是如此修改的话只会影响到当前的会话,并没有对系统返回内永久生效,所以我们需要修改/etc/security/limits.conf,添加以下内容来使我们的配置永久生效
* hard nofile 1024000
* soft nofile 1024000
保存后我们可以通过ulimit -a
或者 ulimit -n
来检测我们的配置是否生效了
内核和网络调优
考虑调整内核和网络,并在/etc/sysctl.conf 中添加以下这些设置:
net.ipv4.tcp_max_syn_backlog = 40000
net.core.somaxconn = 40000
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_mem = 134217728 134217728 134217728
net.ipv4.tcp_rmem = 4096 277750 134217728
net.ipv4.tcp_wmem = 4096 277750 134217728
net.core.netdev_max_backlog = 300000
到此我们便完成了 gatling 所需要的环境准备了