【问题标题】:Error loading large JSON files using Scala Play Framework 2使用 Scala Play Framework 2 加载大型 JSON 文件时出错
【发布时间】:2015-01-04 15:32:30
【问题描述】:

我正在尝试使用 Apache Bench 对一组大型(每个 4MB)JSON 请求进行负载测试。使用大文件和许多并发请求运行时,出现以下错误:

在 RequestBodyHandler java.nio.channels.ClosedChannelException 中捕获的异常:null

这是我的 ab 命令:

ab -p large.json -n 1000 -c 10 http://127.0.0.1:9000/json-tests

如果我在没有并发的情况下运行它并且只有 10 个请求,它可以正常工作。增加请求数或并发数会导致此错误反复发生。

我的控制器目前没有逻辑:

def addJsonTest = Action {
  Ok("OK")
}

这是完整的错误:

[error] play - RequestBodyHandler 中捕获的异常 java.nio.channels.ClosedChannelException: null 在 org.jboss.netty.channel.socket.nio.AbstractNioWorker.setInterestOps(AbstractNioWorker.java:506) [netty-3.9.3.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.AbstractNioWorker$1.run(AbstractNioWorker.java:455) [netty-3.9.3.Final.jar:na] 在 org.jboss.netty.channel.socket.ChannelRunnableWrapper.run(ChannelRunnableWrapper.java:40) [netty-3.9.3.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:372) [netty-3.9.3.Final.jar:na] 在 org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:296) [netty-3.9.3.Final.jar:na]

这只是在开发模式下使用 Play,是否有任何设置或配置让 Play 处理多个大型请求?

谢谢!

【问题讨论】:

    标签: json scala benchmarking playframework-2.2 apachebench


    【解决方案1】:

    您需要使用迭代器进行反应性操作

      val iteratee = Iteratee.foldM[Array[Byte], Either[Result, String]](Right("start")) { case (str, bytes) =>
          Future.successful(Left(Ok))
      }
    
      val parser = BodyParser(rh => iteratee)
    
    
      def eatDust = Action(parser) { req =>
        Ok
      }
    

    查看这些链接。

    https://www.playframework.com/documentation/2.2.x/Iteratees

    Play 2.x : Reactive file upload with Iteratees

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2013-03-21
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多