/ Les messages / Akka s'arrêtent tous en même temps - Scala, Akka

Les messages Akka s'arrêtent tous à la fois - scala, akka

J'ai ce problème drôle et je suis incapable d'identifier le problème.

J'ai cette "simple" application akka. Son objectif principal est de passer en revue chaque document d’une base de données. Mon acteur principal demande des lignes à un seul acteur qui communique avec la base de données. Chaque document récupéré est renvoyé à mon acteur principal. Par lots, ces documents sont ajoutés à un message file d'attente gérée par un répartiteur d'équilibrage, que de petits ouvriers vont vérifier et classer.

Après quelques heures, généralement entre 2 et 4, tous les acteurs s'arrêtent en même temps, jusqu'à 5 secondes d'intervalle.

Je me demandais si l'un de vous avait déjà vu quelque chose de similaire.

Pour information:

  • J'utilise AkkA 2.2.0
  • Pas de messages de demande sont utilisés, seulement dire
  • Je n'utilise aucune méthode de blocage du fil comme Await
  • Les DeadLetters sont la raison pour laquelle je sais que tout s'arrête

Merci de votre aide


D'après les DeadLetters, seuls les acteurs liés à mon répartiteur d'équilibrage / mon routeur round robin s'arrêtent. Y aurait-il quelque chose que j'ai raté?

Ma scala

val workers: ActorRef = context.system.actorOf(
Props(new WorkerActor)
.withRouter(FromConfig())
.withDispatcher("balancing-dispatcher"),
"round-robin"
)

Mon code de configuration

balancing-dispatcher {
type = BalancingDispatcher
executor = "fork-join-executor"
}

akka.actor.deployment {
/round-robin {
router = round-robin
nr-of-instances = 50
resizer {
lower-bound = 10
upper-bound = 100
}
}
}

Réponses:

1 pour la réponse № 1

Je voudrais d’abord utiliser un outil de profilage tel quejconsole ou jvisualvm pour vérifier les problèmes de mémoire, de GC et / ou de fork + jointure. Avez-vous assez de tas alloué? Enregistrez également le nombre de threads et les états de threads (y a-t-il des threads en cours de branchement ou de connexion lorsque le ralentissement se produit?)

Il se peut que vous deviez configurer plusthreads dans le pool de threads d’Akka. Ou que vous avez atteint votre limite supérieure de 100 instances et qu’elles sont toutes occupées. Vous pouvez sous-classer l'implémentation DefaultResizer pour fournir une notification / journalisation explicite de l'activité du resizer et configurer votre sous-classe en tant que resizer.