我最近推出了一个Amazon EC2实例,即T2.micro。安装Wildfly 8.2.0Final之后,我尝试对Web服务器进行负载测试。我测试了服务器以提供小于500字节大小的静态页面,以及一个写入和读取mysql的动态页面。令我惊讶的是,我得到了类似的结果,两次测试都获得了大约1000 RPS的结果。我使用top -d 1监视系统,CPU没有达到最大值,并且有空闲内存。我认为EC2对并发连接有一些限制,或者我的设置需要改进。
我的设置是CentOS 7,WileFly / Jboss 8.2.0 Final,MariaDb 5.5。测试工具是分布式或命令行模式下的jmeter。测试是在远程,同一子网和本地主机上执行的。都得到了相同的结果。
请帮助确定瓶颈在哪里。 Amazon EC2实例是否存在可能影响此问题的限制?感谢。
答案 0 :(得分:6)
是的,根据EC2实例类型存在一些限制,其中一个是网络性能。
亚马逊没有公布每种类型实例的确切限制,但在Instance Types Matrix中,您可以看到t2.micro
具有低到中等的网络性能。如果您需要更好的网络性能,可以查看AWS instance types页面,其中显示哪些实例具有增强型网络:
增强型网络
增强型网络功能使您可以获得更高的每秒数据包(PPS)性能,更低的网络抖动和更低的延迟。与传统实现相比,此功能使用新的网络虚拟化堆栈,可提供更高的I / O性能和更低的CPU利用率。为了利用增强联网,您应该在VPC中启动HVM AMI,并安装相应的驱动程序。目前, C4,C3,R3,I2,M4和D2 实例支持增强型网络。有关如何在EC2实例上启用增强联网的说明,请参阅Linux上的增强联网和Windows上的增强联网教程。要了解有关此功能的更多信息,请查看增强型网络常见问题解答部分。
您在这些SO和SF问题中有更多信息:
答案 1 :(得分:2)
你认为,对于Wildfly来说,1000 RPS感觉非常低,因为Undertow服务器为它提供了one of the fastest in Java land并且是10个最快的时段。
要优化的起点: 确保您没有请求登录(可能导致I / O瓶颈),使用最新的稳定JVM,并且可能值得使用您的应用程序使用的最新Wildfly版本。
完成这项工作后,您几乎肯定会因连接创建而受到瓶颈,而不是您的AWS实例。这可以在JMeter内,也可以在Wildfly子系统中。
要消除JMeter作为罪魁祸首,请在相同的并发级别尝试ApacheBenchmark(" ab"),然后尝试使用-k选项(以允许连接重用)。
就WildFly而言,我必须看到config.xml,但您可以通过调整Undertow subsystem设置来提高性能。默认值通常是可靠的,但是您需要非常少量的I / O线程(1或者CPU数量,不再更多)。
我看到一个简单的Wildfly 10应用程序远远超过了你在t2.micro实例上看到的性能。
服务器设置(EC2 t2.micro运行最新的amazon linux,在US-east-1,不同的AZ)
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,最小负载,不同AZ):
ab -c 16 -k -n 1000 http://$SERVER_PRIVATE_IP:8080/rest/cached/500
16个与keep-alive的并发连接,提供500字节的缓存随机预生成数据
多次运行的结果: 每秒430次请求(RPS),1171 RPS,1527 RPS,1686 RPS,1977年RPS,2471 RPS,3339 RPS,在数十万次请求后最终达到 ~6500 RPS 。
请注意随着时间的推移会如何增加?在基准测试之前预先警服服务器,允许创建足够的处理程序线程以及允许JIT编译是很重要的。 10,000个请求是一个很好的起点。
如果我关闭连接keepalive?峰值约为1450 RPS并发16。但等待!使用单个线程(并发1),它只提供~340-350 RPS。将并发性提高到16以上并不能提供更高的性能,它仍然相当稳定(甚至高达512个并发连接)。
如果我将请求数据大小增加到2000字节,使用http:// $ SERVER_PRIVATE_IP:8080 / rest / cached / 2000,那么它仍然会达到1367 RPS,这表明几乎所有的时间都用在连接处理上。
对于非常大的(300k)请求和连接保持活动,我在主机之间达到大约50 MB / s,但在最佳情况下我已经看到高达90 MB / s。
我说JBoss / Wildfly的表现非常令人印象深刻。请注意,如果主机之间存在更多延迟,则可能需要更高的并发性,以允许往返时间对连接创建的影响。