コード例 #1
0
ファイル: SandboxedProcess.cs プロジェクト: microsoft/BuildXL
        /// <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);
            }
        }
コード例 #2
0
 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)
     });
 }
コード例 #3
0
        /// <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));
            }
        }
コード例 #4
0
ファイル: SandboxedProcess.cs プロジェクト: erikma/BuildXL
        /// <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));
        }