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")); })); }
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" }); }
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); })); }
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)); }