如何在Docker和Akka HTTP中最大化吞吐量?
我正在为性能测量构建一个特定的夹具。我有一个负载发生器,boom()。有了这个,我可以产生相当可观的负载量 我还有一个Docker映像,其中包含作为负载平衡器的nginx,以及两个基于Akka HTTP的REST服务器。它们除了计算命中率之外什么都不做(它们总是返回200) 独立运行其中一台服务器(在Docker之外),我已经能够每秒获得1000次点击。不知道这是好是坏。在这个Docker配置中,这个数字下降到大约220次点击/秒。我有点期待,嗯。。。2000次点击/秒左右。越高越好。如果我能找到一种方法,通过这种安排获得3-4K点击率/秒,我会很高兴 我经常收到这样的错误消息:如何在Docker和Akka HTTP中最大化吞吐量?,docker,akka,akka-http,Docker,Akka,Akka Http,我正在为性能测量构建一个特定的夹具。我有一个负载发生器,boom()。有了这个,我可以产生相当可观的负载量 我还有一个Docker映像,其中包含作为负载平衡器的nginx,以及两个基于Akka HTTP的REST服务器。它们除了计算命中率之外什么都不做(它们总是返回200) 独立运行其中一台服务器(在Docker之外),我已经能够每秒获得1000次点击。不知道这是好是坏。在这个Docker配置中,这个数字下降到大约220次点击/秒。我有点期待,嗯。。。2000次点击/秒左右。越高越好。如果我能
[9549] Get http://192.168.99.100:9090/dispatcher?reply_to=foo: dial tcp 192.168.99.100:9090: socket: too many open files
尝试使用--ulimit nofile=2048运行Docker,但没有帮助。我对Akka的application.conf只是:
akka {
loglevel = "ERROR"
stdout-loglevel = "ERROR"
http.host-connection-pool.max-open-requests = 512
}
服务器代码:
object Main extends App {
implicit val system = ActorSystem()
implicit val mat = ActorMaterializer()
println(":: Starting Simulator on port "+args(0))
Http().bindAndHandle(route, java.net.InetAddress.getLoopbackAddress.getHostAddress, args(0).toInt)
var hits = 0
var isTiming = false
var numSec = 1
lazy val route =
get {
path("dispatcher") {
if(isTiming) hits += 1
complete(StatusCodes.OK)
} ~
path("startTiming" / IntNumber) { sec =>
isTiming = true
hits = 0
numSec = sec
val timeUnit = FiniteDuration(sec, SECONDS)
system.scheduler.scheduleOnce(timeUnit){ isTiming = false }
complete(StatusCodes.OK)
} ~
path("tps") {
val tps = hits/numSec * 2
complete(s"""${args(0)}: TPS-$tps\n""")
}
}
}
操作原理:启动流量流,然后调用/startTiming/10端点(在两台服务器之一上捕获10秒)。10秒后,呼叫/tps几次,计时节点将返回大约每秒点击数(x2)
你知道我怎样才能从中获得更高的性能吗