Mám tento vtipný problém a nedokážem túto záležitosť identifikovať.
Mám túto "jednoduchú" aplikáciu akka. Jeho hlavným cieľom je prechádzať každý dokument do databázy.Môj hlavný herec požaduje riadky jedinému hercovi, ktorý komunikuje s databázou.Každý získaný dokument je vrátený môjmu hlavnému hercovi.Pri dávkach sú tieto dokumenty pridané do správy frontu spravovanú vyrovnávajúcim dispečerom, malí pracovníci prejdú nad nimi a usporiadajú ich.
Po niekoľkých hodinách, zvyčajne medzi 2 a 4, všetci herci zastavia súčasne, až do 5 sekúnd.
Zaujímalo by ma, či niekto z vás videl niečo podobné.
Pre informáciu:
- Používam AkkA 2.2.0
- Nepoužívajte žiadne otázky, len povedzte
- Nepoužívam žiadne spôsoby uzamknutia vlákien, ako napríklad čakanie
- DeadLetters sú dôvody, prečo viem, že všetko sa vypne
Ďakujem za tvoju pomoc
Z DeadLetters sa zdá, že len herci v súvislosti s mojim vyvažujúcim dispečerom / mojim okrúhlym smerovačom sa zastavia. Bolo by niečo, čo mi chýbalo?
Moja škala
val workers: ActorRef = context.system.actorOf(
Props(new WorkerActor)
.withRouter(FromConfig())
.withDispatcher("balancing-dispatcher"),
"round-robin"
)
Môj konfiguračný kód
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
}
}
}
odpovede:
1 pre odpoveď č. 1Najprv by som použil profilovací nástroj ako naprjconsole alebo jvisualvm na kontrolu problémov s pamäťou, GC a / alebo fork +. Máte dostatok haldy? Zaznamenávajte aj počet závitov a stavy závitov (existujú vlákna, keď sa spomalí?)
Možno budete musieť nakonfigurovať viacvlákna v bazéne Akka, alebo že ste dosiahli hornú hranicu 100 inštancií a že sú všetci zaneprázdnení. Môžete podtriedu implementácie DefaultResizer poskytnúť explicitné oznamovanie / zaznamenávanie aktivity resizer a nakonfigurovať svoju podtriedu ako resizer.