【发布时间】:2016-10-10 21:47:48
【问题描述】:
我对 spray 和 akka-http 进行了基准测试,以了解我可以获得的可能吞吐量。测试的应用程序很简单。它在静态 GET 路径上返回静态输出。但是在这两个框架的情况下,当静态响应长度从 7 个字符增加到 ~2040 个字符时,吞吐量从 ~64000 下降到 ~22000 rps。
还有其他人经历过这种行为吗?如何改善这种情况?
测试代码可以在这里找到:gist
它的灵感来自this question 中描述的测试。
使用过的版本:
ubuntu 14.04、scala 2.11.8、oracle jdk 1.8
akka-http: 2.4.11
喷雾:1.3.1 和 akka 2.3.6
【问题讨论】:
-
您返回的数据量是原来的 300 倍,但速度只有 3 倍。这听起来仍然不错。因此,您从 7*64000 = 448000 B/s 提升到 2040*22000 = 44880000 B/s,总体上仍然是一个相当大的增长。
-
嗯,wrk 显示从 ~9MB/s 增加到 ~11MB/s。但我没有从 AWS CloudWatch 中看到类似于网络饱和的东西。我不认为网络是我的瓶颈。我也没有看到 CPU 或内存饱和:CPU 使用率从 80% 下降到 60%。内存从 0.5GB 增加到 1.5GB(系统中有 14GB 可用)。 CPU 中断没有显着增加。那么为什么 spray/akka-http 应该能够处理更少的请求呢?
-
@jrudolph,对不起。我重复了我的测试,发现了一个错误。 MB/s 的吞吐量从 ~9MB/s 增加到 ~70MB/s。我还在基准集中添加了带有 scalatra 的变体(代码被添加到相同的要点),并且看到了类似的吞吐量和长输出。它看起来像网络带宽限制。另一方面,使用默认参数从客户端到服务器的 iperf 给了我大约 88MB/s。我怎样才能更好地检查这个假设?测试结果可见here
标签: performance scala jvm spray akka-http