我也在 Github 上问过这个问题 - https://github.com/Azure/service-fabric-issues/issues/379
我有 (n) 个演员每秒钟都在连续提醒执行。
这些演员在过去 4 天里一直运行良好,但每个实例在调用 StateManager.GetStateAsync 时都会收到以下异常。随后,我看到所有的演员都被停用了。
我找不到与可靠参与者遇到的此异常有关的任何信息。
一旦发生此异常并且参与者被停用,它们就不会被重新激活。
发生此错误的条件是什么?如何进一步诊断问题?
“System.Fabric.FabricNotPrimaryException:引发了‘System.Fabric.FabricNotPrimaryException’类型的异常。在 Microsoft.ServiceFabric.Actors.Runtime.ActorStateProviderHelper.d__81.MoveNext() --- 堆栈跟踪从上一个引发异常的位置结束--- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.ServiceFabric.Actors.Runtime.ActorStateManager.d__181.MoveNext() ---从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.ServiceFabric.Actors.Runtime 的 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) .ActorStateManager.d__7`1.MoveNext()
看看集群资源管理器,我现在可以在该参与者服务的一个分区上看到以下警告:
不健康事件:SourceId='System.FM'、Property='State'、HealthState='Warning'、ConsideWarningAsError=false。分区重新配置花费的时间比预期的要长。fabric:/Ism.TvcRecognition.App/TvChannelMonitor 3 3 4dcca5ee-2297-44f9-b63e-76a60df3bc3d S/S IB _Node1_4 Up 131456742276273986 S/P RD _Node1_2 Up 131456742361691499 P/S RD _Node1_0 Down 131457861497316547 (Showing 3 out of 4 replicas.可用副本总数:1。)
在该分区的主副本中出现警告:
不健康事件:SourceId='System.RAP'、Property='IReplicator.CatchupReplicaSetDuration'、HealthState='Warning'、ConsideWarningAsError=false。
并在 ActiveSecondary 中发出警告:
不健康事件:SourceId='System.RAP'、Property='IStatefulServiceReplica.CloseDuration'、HealthState='Warning'、ConsideWarningAsError=false。开始时间(UTC):2017-08-01 04:51:39.740_Node1_0
5 个节点中有 3 个显示以下错误:
不健康事件:SourceId='FabricDCA'、Property='DataCollectionAgent.DiskSpaceAvailable'、HealthState='Warning'、ConsideWarningAsError=false。数据收集代理 (DCA) 没有足够的磁盘空间进行操作。如果这种情况继续发生,将不会收集诊断信息。
更多信息:
我的集群设置由 5 个 D1 虚拟机节点组成。
Microsoft-Service Fabric 应用程序中的事件查看器错误:
我看到很多
无法从 ETL 文件 D:\SvcFab\Log\QueryTraces\query_traces_5.6.231.9494_131460372168133038_1.etl 读取部分或全部事件。System.ComponentModel.Win32Exception (0x80004005): 句柄在 System.Fabric.Dca.Utility.PerformWithRetries[T](Action`1 worker, T context, RetriableOperationExceptionHandler exceptionHandler, Int32 initialRetryIntervalMs, Int32 maxRetryCount, Int32 maxRetryIntervalMs) at FabricDCA.EtlProcessor.ProcessActiveEtlFile(FileInfo etlFile, DateTime lastEndTime, DateTime& newEndTime, CancellationToken cancelToken)
以及一堆警告,例如:
Api IStatefulServiceReplica.Close() 在分区 {4dcca5ee-2297-44f9-b63e-76a60df3bc3d} 副本 131457861497316547 上运行缓慢,StartTimeUTC = 2017-08-01T04:51:39.789083900Z
最后我想我可能是这一切的根源。事件查看器应用程序日志有一大堆错误,例如:
Ism.TvcRecognition.TvChannelMonitor (3688) (4dcca5ee-2297-44f9-b63e-76a60df3bc3d:131457861497316547):尝试写入文件“D:\SvcFab_App\Ism.TvcRecognition.AppType_App1\work\P_4dcca-b6ee-2297-44e -76a60df3bc3d\R_131457861497316547\edbres00002.jrs" 在偏移量 5242880 (0x0000000000500000) 处 0 (0x00000000) 字节在 0.000 秒后失败,系统错误 112 (0x00000070):“磁盘空间不足。”。写入操作将失败,错误为 -1808 (0xfffff8f0)。如果此错误仍然存在,则文件可能已损坏,可能需要从以前的备份中恢复。
好的,该错误指向 D 驱动器,即临时存储。它有 549 MB 的可用空间,而不是 50 GB。服务结构真的应该坚持到临时存储吗?