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

时间:2016-04-21 09:32:52

标签: c# crash akka.net helios

我们正在使用AKKA.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)

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

有关于如何解决此问题的提示吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

这是known bug in Helios that I logged recently - 正在努力尽快修复它。

我会在修复完成后回复此处并发表评论,但这是我本周正在进行的工作。