在Windows上的高并发负载下,Gatling场景似乎存在网络或HTTP损坏

时间:2017-02-20 20:04:35

标签: windows scala akka netty gatling

我有一个非常简单的Gatling场景,它可以使用并发用户访问单个HTTP端点。

当我以每秒10次请求运行30秒时,一切都很好。

当我在Windows上以每秒60个请求运行30秒时,我得到了非常奇怪的错误,这些错误让我觉得底层网络连接已损坏或被滥用。也许在Gatling或我系统中的其他地方存在竞争条件或并发错误。

我在Linux机器上没有遇到同样的问题。

网络服务器为nginxPHP。我不怀疑这是问题的原因,但我可能是错的。

如何追踪并修复此错误?

方案代码

val scn = scenario("my scenario - one endpoint only")
    .exec(http("fetch")
        .get("http://my.website/page"))
    .inject(
        constantUsersPerSec(requestsPerSecond)
            .during(30.seconds)
            .randomized)
    .protocols(httpProtocol)

setUp(scn)

症状

该方案报告大约8%的故障率,其中的错误看起来像服务器正在回复格式错误的HTTP响应,返回HTTP状态行所在的HTML代码。这些细节有所不同,但这是一个代表性的例子:

2017-02-20 17:30:59,875 DEBUG org.asynchttpclient.netty.request.NettyRequestSender - invalid version format: <META
java.lang.IllegalArgumentException: invalid version format: <META
        at io.netty.handler.codec.http.HttpVersion.<init>(HttpVersion.java:130)
        at io.netty.handler.codec.http.HttpVersion.valueOf(HttpVersion.java:84)
        at io.netty.handler.codec.http.HttpResponseDecoder.createMessage(HttpResponseDecoder.java:118)
        at io.netty.handler.codec.http.HttpObjectDecoder.decode(HttpObjectDecoder.java:219)
        at io.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:152)
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248)
        at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:367)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:353)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:346)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:367)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:353)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:652)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:575)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:489)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:451)
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)
        at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
        at java.lang.Thread.run(Thread.java:745)

同样,服务器日志包含无效请求,其中客户端已发送HTML请求行所在的HTML:

10.56.4.130 - - [20/Feb/2017:17:30:59 +0000] "span class=\x22id4-cta-size-small id5-cta id4-cta-color-blue id4-cta-small-blue\x22><a hr" 400 166 "-" "-" "-" 0.179 -

10.56.4.130 - - [20/Feb/2017:17:31:00 +0000] "<!doctype html>" 400 166 "-" "-" "-" 0.070 -

版本信息

我正在使用:

  • O / S :Windows 8.1 64位
    • 病毒扫描程序:我有Kapersky拦截网络流量。我尝试将其关闭,这没有任何区别。我不知道它是否真的“关闭”。
    • VPN :我的计算机有Windows Direct Connect VPN。目标站点不属于该VPN。
  • Java :“1.8.0_121”,Java HotSpot(TM)64位服务器VM(版本25.121-b13,混合模式)
  • Scala :2.11.8
  • Gatling :2.2.3
    • Akka :2.4.12
    • io.netty.netty-handler :4.0.42.Final
      • (4.0.41.Final是netty-reactive-streams v 1.0.8要求的,我不知道这是否有意义)

0 个答案:

没有答案