当使用AKK.Net作为通信通道时,应用程序偶尔会崩溃

问题描述:

我们使用AKKA.Net来进行多个进程间的通信。当使用AKK.Net作为通信通道时,应用程序偶尔会崩溃

我们使用的AKKA.Net版本是最新版本:1.0.7。 使用AKKE.Net大约有20个进程。这些进程是Windows服务。 进程之间的通信工作量不是很大,10个请求/分钟,并且夜间的工作量为零。 网络不是很稳定。 AKKA.Cluster未在系统中使用。

我们为AppDomain.CurrentDomain.UnhandledException添加一个事件处理程序,以便我们有机会记录一些重要的异常。代码如下:

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

我们保持thoese进程运行数天,发现一些过程(也许2或3)坠毁。我们检查日志,看起来似乎是AKKA.Net的一个未知例外。例外的详细情况列举如下:

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) 

当抛出异常时的工作量几乎为零。

有没有关于如何解决这个问题的任何提示?非常感谢。

这是一个known bug in Helios that I logged recently - 致力于尽快解决问题。

一旦修复失败,我会在这里回复一条评论,但这是我目前在本周工作的内容。

+0

明白了。感谢您的回复! 等待你的好消息:) – sevendays

+0

嗨,这个问题有什么进展吗? :) – sevendays

+0

是的 - 但仍有更多的工作要走。您会在发行说明中看到为什么。您也可以在@aaronontheweb上通过Akka.NET Gitter聊天或在Twitter上ping我。 – Aaronontheweb