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.
Vous l'avez. Merci pour votre réponse! En attente de vos bonnes nouvelles :) – sevendays
Salut, y a-t-il des progrès sur ces questions? :) – sevendays
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