当前位置: 首页 > 知识库问答 >
问题:

播放框架悬挂

景建业
2023-03-14

Rest服务器(Play Framework)中的相关问题在负载测试期间出现“读取超时”异常

java版本“1.8.0_31”java(TM)SE运行时环境(Build1.8.0_31-B13)java HotSpot(TM)64位服务器VM(Build25.31-B07,混合模式)

我正在我的本地PC中测试jmeter。我使用了2000个线程,出现了超时异常,并且Socket不知为什么没有关闭。

如何捕获此异常并关闭悬挂的插座?
堆栈跟踪:

va.util.concurrent.TimeoutException: Futures timed out after [5 seconds]
        at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219) [scala-library.jar:na]
        at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223) [scala-library.jar:na]
        at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:107) ~[scala-library.jar:na]
        at akka.dispatch.MonitorableThreadFactory$AkkaForkJoinWorkerThread$$anon$3.block(ThreadPoolBuilder.scala:169) ~[akka-actor_2.10.jar:2.2.0]
        at scala.concurrent.forkjoin.ForkJoinPool.managedBlock(ForkJoinPool.java:3640) [scala-library.jar:na]
        at akka.dispatch.MonitorableThreadFactory$AkkaForkJoinWorkerThread.blockOn(ThreadPoolBuilder.scala:167) ~[akka-actor_2.10.jar:2.2.0]
        at scala.concurrent.Await$.result(package.scala:107) ~[scala-library.jar:na]
        at play.core.j.FPromiseHelper$.get(FPromiseHelper.scala:53) ~[play_2.10.jar:2.2.4]
        at play.core.j.FPromiseHelper.get(FPromiseHelper.scala) ~[play_2.10.jar:2.2.4]
        at play.libs.F$Promise.get(F.java:363) ~[play_2.10.jar:2.2.4]
wrap response>>
        at com.ganda.common.controllers.filters.WrapResponse.wrap(WrapResponse.java:50) ~[na:na]
db filter below>>>
        at com.ganda.common.controllers.filters.CredentialsFilter.call(CredentialsFilter.java:72) ~[na:na]
        at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:91) ~[play_2.10.jar:2.2.4]
        at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:90) ~[play_2.10.jar:2.2.4]
        at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82) ~[play_2.10.jar:2.2.4]
        at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82) ~[play_2.10.jar:2.2.4]
        at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) ~[scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) ~[scala-library.jar:na]
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library.jar:na]
        at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:37) ~[play_2.10.jar:2.2.4]
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42) ~[akka-actor_2.10.jar:2.2.0]
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386) ~[akka-actor_2.10.jar:2.2.0]
Wrapped by: play.api.Application$$anon$1: Execution exception[[TimeoutException: Futures timed out after [5 seconds]]]
        at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.4]
        at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
        at scala.Option.map(Option.scala:145) [scala-library.jar:na]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:260) [play_2.10.jar:2.2.4]
        at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) [scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) [scala-library.jar:na]
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library.jar:na]
        at play.api.libs.iteratee.Execution$$anon$1.execute(Execution.scala:43) [play-iteratees_2.10.jar:2.2.4]
        at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) [scala-library.jar:na]
        at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) [scala-library.jar:na]
        at scala.concurrent.Promise$class.complete(Promise.scala:55) [scala-library.jar:na]
        at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153) [scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) [scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) [scala-library.jar:na]
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1361) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library.jar:na]

共有1个答案

凤伟泽
2023-03-14

这里所发生的是,播放promise是超时的,可能是由于负载引入的减速。

因此这揭示了应用程序中的一个性能问题,如果可以的话,您可以增加promise超时或配置文件,并改善promise处理的性能,以使其更快地进行。

 类似资料:
  • 而是使用EventStream而不是ArchivedEventStream,当我运行命令alert(通知)消息时,会转到除原始发件人之外的所有连接套接字,我也可以如何发送到原始发件人。 这是我的模型和控制器,使用WebSocket 事件模型 这是控制器

  • 在用400k记录查询MongoDb时,我得到了< code>OutOfMemoryError。我收集了大约40万条用户记录。当我试图检索所有用户(在弹性搜索中转储)时,我得到了< code>OutOfMemoryError错误。 我已经浏览过这个链接,在application.config中添加了jvm.memory=-Xms64m -Xmx1024m,但还是一样的异常。 这是我的堆栈跟踪 -

  • 问题内容: 我想知道(我的Java应用程序的)播放框架版本与我的应用程序的Java版本之间是否有任何联系? 示例:如果我使用play 2.2.1并在计算机上安装了java8。我可以在代码中使用java8吗? 如果有连接。java8的第一个播放版本是什么? 谢谢你妮芙 问题答案: Play 2.3.x是提及Java 8的第一个版本,请参见此处 今天早晨,我正在与我的一位同事交谈,他发现运行2.1.x

  • 这些是以下类别: 在控制器文件中,我有以下文件 列表getQuestion()中的size()引发LazyInitializationException,因为没有打开的会话 我知道,将fetch类型更改为EAGER或在QuestionRepository中的函数定义上方使用JPQL查询可能会解决这个问题,但在我的应用程序中,有些地方没有帮助,我需要延迟fetch。 如何使get问题()函数中的整个

  • 我不熟悉这个框架,尝试使用JavaWS调用RESTful API。我一直在努力解决这个问题。这就是我目前的情况: 这段代码基于JavaWS文档(我发现它非常混乱),旨在发出请求。我认为它的工作原理是重复“ok”结果的完成阶段,该结果包含一个字符串,该字符串是将响应转换为文本的结果。 然后从控制器调用此代码: 我目前收到一个错误,上面写着“变量ws可能没有初始化”,这是有意义的,因为我没有初始化ws

  • 我想知道如何使用Play2.0中的模型和下面列出的查询来查询数据库。我没有看到将直接sql传递到play framework 2.0中的选项。 我想得到一份特定月份的费用清单。 我看到的选项是查询所有费用,然后使用Date对象解析它们列出的月份。 我认为应该有一种有效的方法,我似乎找不到一种使用ebean和Java play framework 2.0来执行此查询的方法。 使现代化 谢谢Nico,