檢查噴灑api的吞吐量。scala,spray,akka - java.lang.OutOfMemoryError:無法創建新的本機線程
場景:25個併發用戶
O的:免費的BSD
內存:2GB
沒有核心數:2
在大約13個併發用戶的我居然也得到了下面的錯誤。
[ERROR] [06/29/2015 05:01:56.407] [default-akka.actor.default-dispatcher-2] [ActorSystem(default)] Uncaught error from thread [default-akka.actor.default-dispatcher-2] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714)
at scala.concurrent.forkjoin.ForkJoinPool.tryAddWorker(ForkJoinPool.java:1672)
at scala.concurrent.forkjoin.ForkJoinPool.deregisterWorker(ForkJoinPool.java:1795)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:117)
阿卡和噴霧從默認的conf變化:
akka{
tcp{
register-timeout = 20s
}
}
spray.can {
request-timeout = 30 s
bind-timeout = 30s
unbind-timeout = 5s
registration-timeout = 30s
}
http.spray.can {
server{
pipelining-limit = 50
}
}
是什麼原因造成的OutOfMemmoryError。從路由器演員拋出異常
我正在Await.result裏面的演員。現在我刪除了它,並將其提供給未來。但是其他演員阻止了諸如REST調用的調用。這會是問題嗎? –
在應用程序中有2個actor系統。現在做到了,似乎在工作。你能解釋一下行爲的變化嗎? –
正如我所說,我無法讀懂頭腦:) - 較少的演員系統 - 較少的內存,所以它可以幫助一點。但是兩個演員系統並不足以成爲這種例外的直接原因(也許你有很多演員系統的「def」工廠 - 那麼這可能是一個問題)。你確定ActorSystem刪除有幫助還是實際上刪除了'Await.result'?回答你的第一個問題 - 阻止REST調用可能不會導致這個異常(但它仍然不好),因爲它們的阻塞是不可管理的,而'ForkJoinPool'知道沒有關於它們,所以它不會創建新的線程。 – dk14