2013-10-26 5 views
1

Я разрабатываю метаэвристический алгоритм в платформе Play и должен иметь неопределенный тайм-аут. Через час нагруженный я получаю следующее сообщение об ошибке:AskTimeoutException: Timed out - Play Framework 2.1

[AskTimeoutException: Таймаут]

! @6g40d7af9 - Internal server error, for (GET) [/planificar] -> 

play.api.Application$$anon$1: Execution exception[[AskTimeoutException: Timed out]] 
    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1] 
    at play.api.DefaultApplication.handleError(Application.scala:383) ~[play_2.10.jar:2.1.1] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:144) ~[play_2.10.jar:2.1.1] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:140) ~[play_2.10.jar:2.1.1] 
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1] 
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1] 
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend$1$$anonfun$apply$1.apply(Promise.scala:104) ~[play_2.10.jar:2.1.1] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library.jar:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library.jar:na] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_25] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_25] 
    at java.lang.Thread.run(Thread.java:724) ~[na:1.7.0_25] 
akka.pattern.AskTimeoutException: Timed out 
    at akka.pattern.PromiseActorRef$$anonfun$1.apply$mcV$sp(AskSupport.scala:310) ~[akka-actor_2.10.jar:na] 
    at akka.actor.DefaultScheduler$$anon$8.run(Scheduler.scala:193) ~[akka-actor_2.10.jar:na] 
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:137) ~[akka-actor_2.10.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1417) ~[scala-library.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262) ~[scala-library.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) ~[scala-library.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478) ~[scala-library.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) ~[scala-library.jar:na] 

Есть ли способ, чтобы исправить эту проблему ?. Спасибо.

EDIT:

Это мой контроллер

public static Result planificar() { 
     Carga.cargarGlobales(); 
     Moacs moacs = new Moacs(cargarParametros()); 
     moacs.ejecutar(); // metaheuristics algorithm 
     List<Solucion> soluciones = moacs.getConjuntoPareto();    
     return ok(soluciones); 
    } 

ответ

2

Вы должны сделать этот контроллер асинхронной: http://www.playframework.com/documentation/2.2.x/JavaAsync

+0

Спасибо, async сделал мой алгоритм медленнее (я не знаю почему), но теперь работает правильно. – JohnPortella

+0

Это странно. Это не должно быть медленнее. –

0

Вы можете установить тайм-аут на очень большое значение. От Scala documentation диапазон FiniteDuration ограничен + - (2^63-1) нс, что составляет примерно 292 года.

Например, можно было бы сделать это:

(someActor ? someMsg)(365 Days).map { x => .... } 
+0

Привет, спасибо за ответ, но где и как я могу изменить ограничение по времени? – JohnPortella

+0

Учитывая ваше недавнее изменение, ответ Джеймса Уорда - это то, что вам нужно. – mantithetical