コード例 #1
0
        public Task <ActionResult> GetGcDump(
            ProcessFilter?processFilter)
        {
            return(this.InvokeService(async() =>
            {
                IProcessInfo processInfo = await _diagnosticServices.GetProcessAsync(processFilter, HttpContext.RequestAborted);

                var graph = new Graphs.MemoryGraph(50_000);

                EventGCPipelineSettings settings = new EventGCPipelineSettings
                {
                    Duration = Timeout.InfiniteTimeSpan,
                };
                await using var pipeline = new EventGCDumpPipeline(processInfo.Client, settings, graph);
                await pipeline.RunAsync(HttpContext.RequestAborted);
                var dumper = new GCHeapDump(graph);
                dumper.CreationTool = "dotnet-monitor";

                //We can't use FastSerialization directly against the Response stream because
                //the response stream size is not known.
                var stream = new MemoryStream();
                var serializer = new FastSerialization.Serializer(stream, dumper, leaveOpen: true);
                serializer.Close();

                stream.Position = 0;

                return File(stream, "application/octet-stream", FormattableString.Invariant($"{GetFileNameTimeStampUtcNow()}_{processInfo.ProcessId}.gcdump"));
            }));
        }
コード例 #2
0
        private static async Task <GCHeapDump> GetGCDumpAsync(IEndpointInfo endpointInfo, CancellationToken token)
        {
            var graph = new Graphs.MemoryGraph(50_000);

            EventGCPipelineSettings settings = new EventGCPipelineSettings
            {
                Duration = Timeout.InfiniteTimeSpan,
            };

            var client = new DiagnosticsClient(endpointInfo.Endpoint);

            await using var pipeline = new EventGCDumpPipeline(client, settings, graph);
            await pipeline.RunAsync(token);

            return(new GCHeapDump(graph)
            {
                CreationTool = "dotnet-monitor"
            });
        }
コード例 #3
0
        public Task <ActionResult> GetGcDump(
            ProcessFilter?processFilter,
            [FromQuery] string egressProvider = null)
        {
            return(this.InvokeService(async() =>
            {
                IProcessInfo processInfo = await _diagnosticServices.GetProcessAsync(processFilter, HttpContext.RequestAborted);

                string fileName = FormattableString.Invariant($"{GetFileNameTimeStampUtcNow()}_{processInfo.EndpointInfo.ProcessId}.gcdump");

                Func <CancellationToken, Task <IFastSerializable> > action = async(token) => {
                    var graph = new Graphs.MemoryGraph(50_000);

                    EventGCPipelineSettings settings = new EventGCPipelineSettings
                    {
                        Duration = Timeout.InfiniteTimeSpan,
                    };

                    var client = new DiagnosticsClient(processInfo.EndpointInfo.Endpoint);

                    await using var pipeline = new EventGCDumpPipeline(client, settings, graph);
                    await pipeline.RunAsync(token);

                    return new GCHeapDump(graph)
                    {
                        CreationTool = "dotnet-monitor"
                    };
                };

                return Result(
                    egressProvider,
                    ConvertFastSerializeAction(action),
                    fileName,
                    ContentTypes.ApplicationOctectStream,
                    processInfo.EndpointInfo);
            }));
        }
コード例 #4
0
        public Task <ActionResult> CaptureGcDump(
            ProcessKey?processKey,
            [FromQuery]
            string egressProvider = null)
        {
            return(InvokeForProcess(processInfo =>
            {
                string fileName = FormattableString.Invariant($"{GetFileNameTimeStampUtcNow()}_{processInfo.EndpointInfo.ProcessId}.gcdump");

                Func <CancellationToken, Task <IFastSerializable> > action = async(token) => {
                    var graph = new Graphs.MemoryGraph(50_000);

                    EventGCPipelineSettings settings = new EventGCPipelineSettings
                    {
                        Duration = Timeout.InfiniteTimeSpan,
                    };

                    var client = new DiagnosticsClient(processInfo.EndpointInfo.Endpoint);

                    await using var pipeline = new EventGCDumpPipeline(client, settings, graph);
                    await pipeline.RunAsync(token);

                    return new GCHeapDump(graph)
                    {
                        CreationTool = "dotnet-monitor"
                    };
                };

                return Result(
                    ArtifactType_GCDump,
                    egressProvider,
                    ConvertFastSerializeAction(action),
                    fileName,
                    ContentTypes.ApplicationOctectStream,
                    processInfo.EndpointInfo);
            }, processKey, ArtifactType_GCDump));
        }