akka调度程序挂起播放应用程序重新加载

时间:2017-01-23 17:30:03

标签: playframework playframework-2.0 akka

在本地工作时,在每次代码更改时都会重新加载框架。在我的情况下,应用程序挂起。我在调试时发现,akka调度程序卡在执行其中一个Runnables。

class SchedulerModule extends AbstractModule {

  def configure() = {
    bind(classOf[MyScheduler]).asEagerSingleton()
  }
}

@Singleton
class MyScheduler @Inject()(asyncCache: AsyncCache){    
   actorSystem.scheduler.schedule(1 minutes, 1 minutes, new Validation(){ override def validate() = //do some io operation})
}

abstract class Validation extends Runnable{
  def validate(): Future[Check]
  def name: String

  override def run(): Unit = {
    Try(Await.result(validate(), timeout)) match {
    case Success(None) =>
    case Failure(e) => Logger.error(errorMessage + s"$name failed!", e)
  }
}

我做错了吗? 在Runnable中阻塞是不对的? 我错过了什么?

这是应用程序卡住的地方(取自线程转储):

"application-akka.actor.default-dispatcher-3" #95 prio=5 os_prio=31 tid=0x00007fe1ebb9f000 nid=0x930b waiting on condition [0x0000700002c41000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007ad483058> (a scala.concurrent.impl.Promise$CompletionLatch)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1328)
    at scala.concurrent.impl.Promise$DefaultPromise.tryAwait(Promise.scala:208)
    at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:218)
    at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223)
    at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:190)
    at akka.dispatch.MonitorableThreadFactory$AkkaForkJoinWorkerThread$$anon$3.block(ThreadPoolBuilder.scala:167)
    at scala.concurrent.forkjoin.ForkJoinPool.managedBlock(ForkJoinPool.java:3640)
    at akka.dispatch.MonitorableThreadFactory$AkkaForkJoinWorkerThread.blockOn(ThreadPoolBuilder.scala:165)
    at akka.dispatch.BatchingExecutor$BlockableBatch.blockOn(BatchingExecutor.scala:106)
    at scala.concurrent.Await$.result(package.scala:190)

谢谢!

0 个答案:

没有答案