2015-02-03 5 views
1

과도한 속도의 메시지가있는 액터를 사용하고 싶습니다. 배우의 마지막 상태는 내가 셧다운 제가 전에이높은 비율의 메시지로 액터 상태를 유지하는 방법

val receiveCommand: Receive = { 
    case Cmd(data) => 
     persistAsync(Evt(s"${data}-${numEvents}"))(updateState) 
    case "snap" => saveSnapshot(state) 
    case "print" => println(state) 
    } 

같은 메시지

for (i <-0 to 100000){ 
    persistentActor ! Cmd("foo"+i) 
} 

및 사용의 부하를 보내도록 persistAsync을 시도 내가 여기 http://doc.akka.io/docs/akka/2.3.9/scala/persistence.html#event-sourcing 에 표시된 지속성 예를 들어 다음과 같은했다 매우 중요하다 모든 것이 지속되도록 Thread.sleep (150000)을 추가했습니다. 처음에는 모두가 확인 될 것으로 보인다, 그러나 응용 프로그램을 실행 다시하는 것은 일부 데드 - 레터

> [INFO] [02/03/2015 15:35:18.187] 
> [example-akka.actor.default-dispatcher-3] 
> [akka://example/user/persistentActor-4-scala] Message 
> [java.lang.String] from Actor[akka://example/deadLetters] to 
> Actor[akka://example/user/persistentActor-4-scala#1206460640] was not 
> delivered. [1] dead letters encountered. This logging can be turned 
> off or adjusted with configuration settings 'akka.log-dead-letters' 
> and 'akka.log-dead-letters-during-shutdown'. [INFO] [02/03/2015 
> 15:35:18.192] [example-akka.actor.default-dispatcher-3] 
> [akka://example/user/persistentActor-4-scala] Message 
> [akka.persistence.Recover] from 
> Actor[akka://example/user/persistentActor-4-scala#1206460640] to 
> Actor[akka://example/user/persistentActor-4-scala#1206460640] was not 
> delivered. [2] dead letters encountered. This logging can be turned 
> off or adjusted with configuration settings 'akka.log-dead-letters' 
> and 'akka.log-dead-letters-during-shutdown'. 

or getting something like : 


---------- 
[INFO] [02/03/2015 15:54:32.732] [example-akka.actor.default-dispatcher-11] [akka://example/user/persistentActor-4-scala] Message [akka.persistence.JournalProtocol$ReplayedMessage] from Actor[akka://example/deadLetters] to Actor[akka://example/user/persistentActor-4-scala#-973984210] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
[INFO] [02/03/2015 15:54:32.735] [example-akka.actor.default-dispatcher-3] [akka://example/user/persistentActor-4-scala] Message [akka.persistence.JournalProtocol$ReplayedMessage] from Actor[akka://example/deadLetters] to Actor[akka://example/user/persistentActor-4-scala#-973984210] was not delivered. [10] dead letters encountered, no more dead letters will be logged. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
A fatal error has been detected by the Java Runtime Environment: 
    SIGSEGV (0xb) at pc=0x00007fa2a3e06b6a, pid=18870, tid=140335801857792 
JRE version: Java(TM) SE Runtime Environment (7.0_71-b14) (build 1.7.0_71-b14) 
Java VM: Java HotSpot(TM) 64-Bit Server VM (24.71-b01 mixed mode linux-amd64 compressed oops) 
Problematic frame: 
V [libjvm.so+0x97bb6a] Unsafe_GetNativeByte+0xaa 

Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again 

An error report file with more information is saved as: 
/home/tadmin/projects/akka-sample-persistence-scala/hs_err_pid18870.log 

If you would like to submit a bug report, please visit: 
    http://bugreport.sun.com/bugreport/crash.jsp 

을가는 것을 보여줍니다 ==================== ========================================================================================================== ==

많은 양의 메시지를 처리해야하는 액터의 상태를 어떻게 유지할 수 있습니까?

+1

시스템을 종료하기 전에 시스템이 종료되도록하십시오 : http://letitcrash.com/post/30165507578/shutdown-patterns-in-akka-2 – cmbaxter

+0

어떤 데이터베이스를 사용하고 있습니까? –

+0

@cmbaxter 정상 종료를하고 있지만 종료 전에 지속성 프로세스가 완료되었다는 것을 어떻게 알 수 있습니까? – igx

답변

0

기본 데이터베이스 인 levelDB가 문제이며, 코어 덤프가 가장 확실하다고 생각합니다. 둘 이상의 배우가 동시에 데이터베이스에 글을 쓰고 있습니까? 내 경험상, 그 시나리오에서 코어 덤프를 보았습니다. shared mode에서 시도해 볼 수는 있지만 다른 데이터베이스를 연결하기 만하면 문제가 사라졌습니다. 제 경우에는 Cassandra을 사용했습니다.

akka-persistence 용 메모리 내 저널 플러그인을 사용해 보겠습니다. 문제가 해결되지 않으면 levelDB가 문제라는 것을 알고 있습니다. 그렇다면 다른 데이터베이스로 이동하십시오.

+0

에 있습니다. 늦어서 반갑습니다. 실제로 - 아니, 나는 나의 예에서 보여지는 것과 같은 배우를 사용하고있다. – igx

+1

제 생각에는 동일한 배우를 계속 사용하면서 다른 데이터베이스로 akka-persistence를 구성하는 것입니다. 메모리 내 저널 플러그인을 먼저 시도해보십시오. 문제가 해결되지 않으면 JDBC, cassandra, mongodb 또는 기타와 같은 다른 (실제) 데이터베이스 플러그인을 사용하십시오. 문제는 akka-persistence에서 사용되는 기본 데이터베이스 인 LevelDB에서 나온 코어 덤핑 때문입니다. –