我的设置是CentOS 7,WileFly/Jboss 8.2.0 Final,MariaDb 5.5。测试工具是分布式模式或命令行模式下的jmeter。测试在远程、同一子网上和本地主机上进行。结果相同。
请帮忙确定瓶颈在哪里。亚马逊EC2实例是否有任何限制可能会影响这一点?谢谢。
是的,根据EC2实例类型,有一些限制,其中之一是网络性能。
亚马逊没有发布每种实例类型的确切限制,但在实例类型矩阵中,您可以看到t2.micro
具有低到中等的网络性能。如果您需要更好的网络性能,可以在AWS实例类型页面上查看哪些实例具有增强的网络功能:
增强型网络可显著提高每秒数据包 (PPS) 性能,降低网络抖动和延迟。此功能使用新的网络虚拟化堆栈,与传统实现相比,提供更高的 I/O 性能和更低的 CPU 利用率。要利用增强型网络,您应该在 VPC 中启动 HVM AMI,并安装适当的驱动程序。增强型网络目前支持 C4、C3、R3、I2、M4 和 D2 实例。有关如何在 EC2 实例上启用增强型网络的说明,请参阅 Linux 上的增强型网络和 Windows 上的增强型网络教程。要了解更多信息,请查看增强型网络 FAQ 部分。
服务器设置(位于美国东部1个不同的AZ中,运行最新版亚马逊Linux的EC2 t2.micro)
sudo yum install docker
sudo service docker start
sudo docker run --rm -it -p 8080:8080 svanoort/jboss-demo-app:0.7-lomem
客户端(另一台t2.micro,负载很小,位于不同的可用区):
ab -c 16 -k -n 1000 http://$SERVER_PRIVATE_IP:8080/rest/cached/500
使用keep-alive,同时有16个并发连接,提供500字节的缓存随机预生成数据。
多次运行的结果:
每秒430个请求(RPS),1171 RPS,1527 RPS,1686 RPS,1977 RPS,2471 RPS,3339 RPS,最终峰值达到 ~6500 RPS,经过数十万个请求后才达到此值。
注意这个值是如何随时间增加而上升的。在进行基准测试之前,预热服务器非常重要,以允许创建足够的处理线程,并允许JIT编译。一般来说,10000个请求是一个很好的起点。
如果我关闭keepalive连接?并发16时峰值约为1450 RPS。 但是请等一下!使用单个线程(并发1)时,只有约340-350 RPS。将并发度增加到16以上并不能提高性能,它保持相当稳定(即使增加到512个并发连接)。
如果我将请求数据大小增加到2000字节,可以通过http://$SERVER_PRIVATE_IP:8080/rest/cached/2000实现,仍然可以达到1367 RPS,显示几乎所有时间都花费在连接处理上。
使用非常大的请求(300k)和keep-alive连接,在主机之间达到约50 MB/s的速度,但在最佳情况下,我曾经见过高达90 MB/s的速度。
对于JBoss/Wildfly来说,这是非常令人印象深刻的性能。请注意,如果主机之间存在更多的延迟,则可能需要更高的并发度,以允许往返时间对连接创建的影响。