服务器压力下的StreamTcpException

时间:2016-07-07 18:10:45

标签: scala akka akka-http

我有一个使用Akka HTTP的服务,我一直在做一些负载测试。在压力下,我发现在调用其他服务端点时,我的服务会偶尔遇到StreamTcpException。

我为每个端点创建一个流,由我的所有actor共享。我正在使用这样的东西:

//this is done only once
val connectionFlow = Http(sys).outgoingConnection("host_name")

...

//each actor does this
val response = Source.single(HttpRequest(...)).via(connectionFlow).runWith(Sink.head)

我使用Apache JMeter加载测试我的服务,并且使用40个线程,在看到我的第一条错误消息之前,它通常需要2000-4000个请求。有10个线程,在我看到它之前我需要9000个请求。

消息如下: akka.stream.StreamTcpException: Tcp command [Connect(<host_here>/<ip_here>,None,List(),Some(10 seconds),true)] failed

对于我的服务所依赖的4个不同端点,我实际上有4个独立的流。如果我的服务失败,我通常会看到所有四个中的StreamTcpException。

任何人都有任何想法为什么会这样?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我以前也遇到过同样的问题,对我来说,它工作正常。

val httpClient: Flow[HttpRequest, HttpResponse, Future[Http.OutgoingConnection]] = Http().outgoingConnection(host,port,None,connSetts)

问题地方Source.single(request).via(httpClient)

它无法连接主机,因此我使用代理服务器。

val httpsProxyTransport : ClientTransport = ClientTransport.httpsProxy(InetSocketAddress.createUnresolved("proxyservicesHost", 90))
val connSetts: ClientConnectionSettings = ClientConnectionSettings(system).withTransport(httpsProxyTransport).withIdleTimeout(Duration(180, "second"))
val httpClient: Flow[HttpRequest, HttpResponse, Future[Http.OutgoingConnection]] = Http().outgoingConnection(host,port,None,connSetts)

然后我在httpclient中传递.via(httpclient),它可以工作。