Приложение иногда зависало при использовании AKK.Net в качестве канала связи

Мы используем AKKA.Net для связи между несколькими процессами.

Версия AKKA.Net, которую мы используем, является самой новой: 1.0.7. Есть около 20 процессов, которые используют AKKE.Net. Эти процессы являются службами Windows. Рабочая нагрузка связи между процессами невелика, 10 запросов в минуту, а ночная нагрузка равна нулю. Сеть не очень стабильна. AKKA.Cluster не использовался в системе.

Мы добавляем обработчик событий для AppDomain.CurrentDomain.UnhandledException, чтобы у нас была возможность регистрировать некоторые критические исключения. Код выглядит так:

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

Мы поддерживаем эти процессы в течение нескольких дней и обнаружили, что некоторые процессы (возможно, 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 ответ

Это известная ошибка в Helios, которую я недавно зарегистрировал - работаю над тем, чтобы исправить ее как можно скорее.

Я вернусь сюда с комментарием, как только исправление выйдет, но это то, над чем я сейчас работаю на этой неделе.

Другие вопросы по тегам