【问题标题】:StreamTcpException while under server stress在服务器压力下出现 StreamTcpException
【发布时间】:2019-03-18 19:26:03
【问题描述】:

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

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

//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。

有人知道为什么会这样吗?提前致谢。

【问题讨论】:

  • StreamTcpException 的消息是什么?
  • @johanandren akka.stream.StreamTcpException: Tcp command [Connect(<host_here>/<ip_here>,None,List(),Some(10 seconds),true)] failed
  • 嗯,恐怕没有多大帮助。您是否尝试过打开调试日志以查看是否可以提供任何进一步的见解? (有趣的东西应该来自 TcpOutgoingConnection 演员)
  • @johanandren 是的,不幸的是,这是一条非常模糊的错误消息。我刚刚打开了调试日志记录,但是当我收到错误时,我没有看到来自 TcpOutgoingConnection 的任何内容(也许我做错了什么?)。
  • 本地可用端口可能已用完,因为它们的回收速度不够快。您是否考虑过为每个出站请求使用主机连接池而不是新连接?这应该会减少端口流失,并且对于像这样的高负载场景来说效率更高。

标签: scala akka akka-http


【解决方案1】:

我以前遇到过同样的问题,对我来说它按预期工作。

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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多