/// <inheritdoc /> public ProcessMemoryCountersSnapshot?GetMemoryCountersSnapshot() { try { if (!IsDetouredProcessUsable) { return(null); } ulong lastPeakWorkingSet = 0; ulong lastPeakCommitSize = 0; ulong lastWorkingSet = 0; ulong lastCommitSize = 0; bool isCollectedData = false; var visitResult = TryVisitJobObjectProcesses((processHandle, _) => { var memoryUsage = Interop.Windows.Memory.GetMemoryUsageCounters(processHandle.DangerousGetHandle()); if (memoryUsage != null) { isCollectedData = true; lastPeakWorkingSet += memoryUsage.PeakWorkingSetSize; lastPeakCommitSize += memoryUsage.PeakPagefileUsage; lastWorkingSet += memoryUsage.WorkingSetSize; lastCommitSize += memoryUsage.PagefileUsage; } }); if (visitResult != VisitJobObjectResult.Success) { return(null); } if (isCollectedData) { m_peakWorkingSet.RegisterSample(lastPeakWorkingSet); m_peakCommitSize.RegisterSample(lastPeakCommitSize); m_workingSet.RegisterSample(lastWorkingSet); m_commitSize.RegisterSample(lastCommitSize); } return(ProcessMemoryCountersSnapshot.CreateFromBytes( lastPeakWorkingSet, lastWorkingSet, Convert.ToUInt64(m_workingSet.Average), lastPeakCommitSize, lastCommitSize)); } catch (NullReferenceException ex) { // Somewhere above there is a NRE but the stack doesn't match a line number and there is no obvious bug. BuildXL.Tracing.UnexpectedCondition.Log(m_loggingContext, "Null reference exception when collecting MemoryCountersSnapshot: " + ex.ToString()); return(null); } }
private ResourceManagerWorkItemTracker CreateWorkItem(ProcessResourceManager resourceManager, int estimatedRamUsage = 0, bool allowCancellation = true, int reportedRamUsage = 1) { return(new ResourceManagerWorkItemTracker( LoggingContext, resourceManager, (uint)Interlocked.Increment(ref m_nextId), estimatedRamUsage, allowCancellation) { RamUsage = ProcessMemoryCountersSnapshot.CreateFromMB(reportedRamUsage, reportedRamUsage, reportedRamUsage, reportedRamUsage, reportedRamUsage) }); }
/// <inheritdoc /> public ProcessMemoryCountersSnapshot?GetMemoryCountersSnapshot() { using (m_queryJobDataLock.AcquireReadLock()) { if (!IsDetouredProcessUsable()) { return(null); } ulong lastPeakWorkingSet = 0; ulong lastPeakCommitSize = 0; ulong lastWorkingSet = 0; ulong lastCommitSize = 0; bool isCollectedData = false; var visited = m_detouredProcess.TryVisitJobObjectProcesses((processHandle, _) => { var memoryUsage = Interop.Windows.Memory.GetMemoryUsageCounters(processHandle.DangerousGetHandle()); if (memoryUsage != null) { isCollectedData = true; lastPeakWorkingSet += memoryUsage.PeakWorkingSetSize; lastPeakCommitSize += memoryUsage.PeakPagefileUsage; lastWorkingSet += memoryUsage.WorkingSetSize; lastCommitSize += memoryUsage.PagefileUsage; } }); if (!visited) { return(null); } if (isCollectedData) { m_peakWorkingSet.RegisterSample(lastPeakWorkingSet); m_peakCommitSize.RegisterSample(lastPeakCommitSize); m_workingSet.RegisterSample(lastWorkingSet); m_commitSize.RegisterSample(lastCommitSize); } return(ProcessMemoryCountersSnapshot.CreateFromBytes( lastPeakWorkingSet, lastWorkingSet, Convert.ToUInt64(m_workingSet.Average), lastPeakCommitSize, lastCommitSize)); } }
/// <inheritdoc /> public ProcessMemoryCountersSnapshot?GetMemoryCountersSnapshot() { (JobObject jobObject, uint[] childProcesses) = GetJobObjectWithChildProcessIds(); if (jobObject == null) { return(null); } ulong lastPeakWorkingSet = 0; ulong lastPeakCommitSize = 0; ulong lastWorkingSet = 0; ulong lastCommitSize = 0; bool isCollectedData = false; VisitJobObjectProcesses(jobObject, childProcesses, (processHandle, _) => { var memoryUsage = Interop.Windows.Memory.GetMemoryUsageCounters(processHandle.DangerousGetHandle()); if (memoryUsage != null) { isCollectedData = true; lastPeakWorkingSet += memoryUsage.PeakWorkingSetSize; lastPeakCommitSize += memoryUsage.PeakPagefileUsage; lastWorkingSet += memoryUsage.WorkingSetSize; lastCommitSize += memoryUsage.PagefileUsage; } }); if (isCollectedData) { m_peakWorkingSet.RegisterSample(lastPeakWorkingSet); m_peakCommitSize.RegisterSample(lastPeakCommitSize); m_workingSet.RegisterSample(lastWorkingSet); m_commitSize.RegisterSample(lastCommitSize); } return(ProcessMemoryCountersSnapshot.CreateFromBytes( lastPeakWorkingSet, lastWorkingSet, Convert.ToUInt64(m_workingSet.Average), lastPeakCommitSize, lastCommitSize)); }