2016-04-21 1 views
1

nous utilisons AKKA.Net pour la communication entre plusieurs processus.L'application a planté occasionnellement en utilisant AKK.Net comme canal de communication

La version d'AKKA.Net que nous utilisons est la plus récente: 1.0.7. Il existe environ 20 processus utilisant AKKE.Net. Ces processus sont des services Windows. La charge de travail de communication entre les processus n'est pas importante, 10 requêtes/minute et la charge de travail de nuit est égale à zéro. Le réseau n'est pas très stable. L'AKKA.Cluster n'est pas utilisé dans le système.

Nous ajoutons un gestionnaire d'événements pour AppDomain.CurrentDomain.UnhandledException, afin que nous ayons la possibilité de consigner certaines exceptions critiques. Le code ressemble à:

AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) => 
    { 
    logger.LogFatal("Unhandled exception captured, Terminating:" + eventArgs.IsTerminating); 
    }; 

Nous gardons thoese processus en cours d'exécution pendant plusieurs jours, et a constaté que certains processus (peut-être 2 ou 3) se sont écrasés. Nous vérifions le journal et il semble qu'il résulte d'une exception non-acceptée d'AKKA.Net. Les détails de l'exception sont répertoriés ci-dessous:

Exception message:Object reference not set to an instance of an object. 
Exception stacktrace: 
    at Helios.Reactor.Tcp.TcpProxyReactor.CloseConnection(Exception ex, IConnection remoteHost) 
    at Helios.Reactor.Tcp.TcpProxyReactor.ReceiveCallback(IAsyncResult ar) 
    at System.Net.LazyAsyncResult.Complete(IntPtr userToken) 
    at System.Net.ContextAwareResult.CompleteCallback(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Net.ContextAwareResult.Complete(IntPtr userToken) 
    at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) 
    at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 

La charge de travail au moment où l'exception a été levée est presque nulle.

Y at-il des conseils sur la façon de résoudre ce problème? Merci beaucoup.

Répondre

1

Ceci est un known bug in Helios that I logged recently - qui travaille à obtenir une solution pour cela dès que possible.

Je vous répondrai ici avec un commentaire une fois que le correctif est sorti, mais c'est ce sur quoi j'ai travaillé cette semaine.

+0

Vous l'avez. Merci pour votre réponse! En attente de vos bonnes nouvelles :) – sevendays

+0

Salut, y a-t-il des progrès sur ces questions? :) – sevendays

+0

Oui, mais il reste encore du travail à faire. Vous verrez pourquoi dans les notes de version. Vous pouvez également me contacter sur @aaronontheweb sur le chat Akka.NET Gitter ou sur Twitter. – Aaronontheweb