Service Fabric客户端API内存泄漏

时间:2019-04-28 14:19:36

标签: c# memory-leaks azure-service-fabric

我有一个无状态服务,该服务使用Fabric client api来遍历集群中的所有应用程序和服务,并验证其运行状况。

一旦获得所有服务(约1000个),它将执行以下代码:

            var tasksList = new List<Task>();
            IEnumerbale<Application> applications = await GetClusterApplications();
            foreach (var application in applications)
            {

                cancellationToken.ThrowIfCancellationRequested();
                var servicesList = await GetApplicationServices(application);
                var task = Task.Run(async () =>
                {
                    foreach (var service in servicesList)
                    {
                        await _client.TestManager.ValidateServiceAsync(service, TimeSpan.FromSeconds(10), cancellationToken);
                    }
                }, cancellationToken);
                tasksList.Add(task);


            }

            Task.WaitAll(tasksList.ToArray());

此代码大约需要4分钟才能完成,在45秒后,我们将开始另一个迭代。 检查内存,每次代码运行时它都会不断增加。在比较上面的代码之前和之后,我比较了堆。

这是堆转储: enter image description here

为什么有那么多CancellationTokenSource对象?什么是SparselyPopulatedArrays? 最大的问题是:谁拥有这些对象的引用,却不允许GC收集它们?

顺便说一句,上面的代码被包装在一个方法中,该方法在每个间隔时间被称为,

0 个答案:

没有答案