文章目录
前言
Gatling
Gatling是一款功能强大的负载测试工具,它为易于使用,高可维护性和高性能而设计。
开箱即用,Gatling由于对HTTP协议的出色支持,使其成为负载测试任何HTTP服务器的首选工具。由于核心引擎实际上是协议不可知的,因此完全可以实现对其他协议的支持。例如,Gatling目前还提供JMS支持。
代码自定义并且场景资源有效是Gatling的两个基础。并且拥有富有表现力的DSL,自我解释的场景,易于维护,可以保存在版本控制系统中的优点。
只要底层协议(如HTTP)可以以非阻塞方式实现,Gatling的体系结构就是异步的。这种架构允许我们将虚拟用户实现为消息而不是专用线程,这使得硬件要求不需要很苛刻。因此,运行数千个并发虚拟用户不是问题。
使用理由
- 避免崩溃:Gatling可以帮助您预测缓慢的响应时间和奔溃。
- 缩短产品上市时间:Gatling 在开发周期的早期检测到性能问题和错误
- 增强用户体验:Gatling可以准确描述您最慢的用户体验
- 提升您的业务:加特林可以防止您的业务成为自身成功的牺牲品
性能测试
性能测试是什么意思?
Web应用程序的性能测试包括:
- 模拟大量具有复杂行为的用户;
- 收集和汇总所有请求的响应时间;
- 创建报告和分析数据;
编写测试场景,自动化测试
Gatling的类似代码的脚本使您可以轻松维护测试场景,并在持续交付管道中轻松实现自动化。
我们开发了自己的领域特定语言(DSL),以便让每个人都能轻松阅读您的场景。
分析并调查您的应用程序的瓶颈
Gatling是一个功能强大的工具:只需几台计算机,您就可以 在Web应用程序上模拟每秒数十万个请求,并获得高精度指标。
在测试结束时,Gatling会自动生成详尽,动态且丰富多彩的报告。
平均值和平均数据是不够的:使用Gatling,您可以得到适当的响应时间百分位数**。**不要让最慢的用户落后!
安装
准备工作
Java版本
Gatling主要针对Oracle提供的JDK8软件包进行测试。Gatling需要JDK8(因此不支持JDK9 atm)。Gatling应该适用于任何JDK8更新,但我们建议您使用最新版本。
IPv4 vs IPv6
发现IPv6(默认情况下在Java上启用)有时会导致一些性能问题,因此启动脚本会使用以下选项禁用它:
-Djava.net.preferIPv4Stack=true
-Djava.net.preferIPv6Addresses=false
如果您确实需要优先选择IPv6,请编辑启动脚本。
操作系统调整
以下说明摘自伟大的Riak文档。 有关更多详细信息或OS X的说明,请参阅“ 打开文件限制” 和“ 内核和网络调整”部分。
在正常操作期间,Gatling会消耗大量的打开文件句柄。通常,操作系统会限制此数量,因此您可能必须在所选操作系统中调整一些选项,以便可以打开许多新套接字并实现高负载。
打开文件限制
大多数操作系统都可以使用该命令更改打开文件限制。例:ulimit -n
$ ulimit -n 65536
但是,这只会更改当前shell会话的限制。在系统范围内,永久性地更改限制因系统而异。
要为系统的所有用户永久设置软值和硬值*,*以允许最多65536个打开文件; 编辑/etc/security/limits.conf
并附加以下两行:
* soft nofile 65535
* hard nofile 65535
保存文件。启动新会话以使限制生效。您现在可以验证是否正确设置了限制。ulimit -a
对于Debian和Ubuntu,您应该启用PAM用户限制。为此,请添加:session required pam_limits.so
/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive
如果文件存在/etc/pam.d/sshd
如果您通过SSH访问该计算机
另外,如果访问通过SSH的机器,一定要具有在UseLogin yes``/etc/ssh/sshd_config
要进行更多调整,您可能需要执行以下操作:
# more ports for testing
sudo sysctl -w net.ipv4.ip_local_port_range="1025 65535"
# increase the maximum number of possible open file descriptors:
echo 300000 | sudo tee /proc/sys/fs/nr_open
echo 300000 | sudo tee /proc/sys/fs/file-max