Esempio n. 1
0
        public SystemStatsHelper(ILogger log, ICheckpoint writerCheckpoint)
        {
            Ensure.NotNull(log, "log");
            Ensure.NotNull(writerCheckpoint, "writerCheckpoint");

            _log = log;
            _writerCheckpoint = writerCheckpoint;
            _perfCounter      = new PerfCounterHelper(_log);
        }
Esempio n. 2
0
        public SystemStatsHelper(ILogger log, ICheckpoint writerCheckpoint, string dbPath, long collectIntervalMs)
        {
            Ensure.NotNull(log, "log");
            Ensure.NotNull(writerCheckpoint, "writerCheckpoint");

            _log = log;
            _writerCheckpoint    = writerCheckpoint;
            _perfCounter         = new PerfCounterHelper(_log);
            _eventCountersHelper = new EventCountersHelper(collectIntervalMs);
            _dbPath = dbPath;
        }
        private void GetPerfCounterInformation(Dictionary <string, object> stats, int count)
        {
            if (_giveup)
            {
                return;
            }
            var process = Process.GetCurrentProcess();

            try
            {
                _perfCounter.RefreshInstanceName();

                var procCpuUsage = _perfCounter.GetProcCpuUsage();

                stats["proc-startTime"]            = process.StartTime.ToUniversalTime().ToString("O");
                stats["proc-id"]                   = process.Id;
                stats["proc-mem"]                  = new StatMetadata(process.WorkingSet64, "Process", "Process Virtual Memory");
                stats["proc-cpu"]                  = new StatMetadata(procCpuUsage, "Process", "Process Cpu Usage");
                stats["proc-cpuScaled"]            = new StatMetadata(procCpuUsage / Environment.ProcessorCount, "Process", "Process Cpu Usage Scaled by Logical Processor Count");
                stats["proc-threadsCount"]         = _perfCounter.GetProcThreadsCount();
                stats["proc-contentionsRate"]      = _perfCounter.GetContentionsRateCount();
                stats["proc-thrownExceptionsRate"] = _perfCounter.GetThrownExceptionsRate();

                stats["sys-cpu"]     = _perfCounter.GetTotalCpuUsage();
                stats["sys-freeMem"] = GetFreeMem();

                var gcStats = _perfCounter.GetGcStats();
                stats["proc-gc-allocationSpeed"]   = gcStats.AllocationSpeed;
                stats["proc-gc-gen0ItemsCount"]    = gcStats.Gen0ItemsCount;
                stats["proc-gc-gen0Size"]          = gcStats.Gen0Size;
                stats["proc-gc-gen1ItemsCount"]    = gcStats.Gen1ItemsCount;
                stats["proc-gc-gen1Size"]          = gcStats.Gen1Size;
                stats["proc-gc-gen2ItemsCount"]    = gcStats.Gen2ItemsCount;
                stats["proc-gc-gen2Size"]          = gcStats.Gen2Size;
                stats["proc-gc-largeHeapSize"]     = gcStats.LargeHeapSize;
                stats["proc-gc-timeInGc"]          = gcStats.TimeInGc;
                stats["proc-gc-totalBytesInHeaps"] = gcStats.TotalBytesInHeaps;
            }
            catch (InvalidOperationException)
            {
                _log.Info("Received error reading counters. Attempting to rebuild.");
                _perfCounter = new PerfCounterHelper(_log);
                _giveup      = count > 10;
                if (_giveup)
                {
                    _log.Error("Maximum rebuild attempts reached. Giving up on rebuilds.");
                }
                else
                {
                    GetPerfCounterInformation(stats, count + 1);
                }
            }
        }
        public async void StartLogging()
        {
            while (!_disposed)
            {
                await Task.Delay(_logFrequency);

                // Get system CPU
                string CPU = PerfCounterHelper.GetSystemCPU();

                // Get process's working memory in MB
                Process curProcess   = Process.GetCurrentProcess();
                long    procMemoryMB = curProcess.WorkingSet64 >> 20;

                // Add data to CSV
                DateTime now = DateTime.Now;
                writeToCSV(now, CPU, procMemoryMB);

                if (_logToConsole)
                {
                    Console.WriteLine($"[{now}]: CPU: {CPU}%, Memory: {procMemoryMB} MB");
                }
            }
        }
Esempio n. 5
0
        private void GetPerfCounterInformation(Dictionary <string, object> stats, int count)
        {
            if (_giveup)
            {
                return;
            }
            var process = Process.GetCurrentProcess();

            try
            {
                stats["proc-startTime"]            = process.StartTime.ToUniversalTime().ToString("O");
                stats["proc-id"]                   = process.Id;
                stats["proc-mem"]                  = new StatMetadata(process.WorkingSet64, "Process", "Process Virtual Memory");
                stats["proc-cpu"]                  = new StatMetadata(_perfCounter.GetProcCpuUsage(), "Process", "Process Cpu Usage");
                stats["proc-threadsCount"]         = _perfCounter.GetProcThreadsCount();
                stats["proc-contentionsRate"]      = _perfCounter.GetContentionsRateCount();
                stats["proc-thrownExceptionsRate"] = _perfCounter.GetThrownExceptionsRate();

                stats["sys-cpu"]     = _perfCounter.GetTotalCpuUsage();
                stats["sys-freeMem"] = GetFreeMem();
            }
            catch (InvalidOperationException)
            {
                _log.Info("Received error reading counters. Attempting to rebuild.");
                _perfCounter = new PerfCounterHelper(_log);
                _giveup      = count > 10;
                if (_giveup)
                {
                    _log.Error("Maximum rebuild attempts reached. Giving up on rebuilds.");
                }
                else
                {
                    GetPerfCounterInformation(stats, count + 1);
                }
            }
        }
Esempio n. 6
0
        private void GetPerfCounterInformation(Dictionary <string, object> stats, int count)
        {
            if (_giveup)
            {
                return;
            }
            var process = Process.GetCurrentProcess();

            try {
                stats["proc-startTime"]            = process.StartTime.ToUniversalTime().ToString("O");
                stats["proc-id"]                   = process.Id;
                stats["proc-mem"]                  = new StatMetadata(process.WorkingSet64, "Process", "Process Virtual Memory");
                stats["proc-cpu"]                  = new StatMetadata(_eventCountersHelper.GetProcCpuUsage(), "Process", "Process Cpu Usage");
                stats["proc-threadsCount"]         = _eventCountersHelper.GetProcThreadsCount();
                stats["proc-contentionsRate"]      = _eventCountersHelper.GetContentionsRateCount();
                stats["proc-thrownExceptionsRate"] = _eventCountersHelper.GetThrownExceptionsRate();

                switch (OS.OsFlavor)
                {
                case OsFlavor.Windows:
                    stats["sys-cpu"] = _perfCounter.GetTotalCpuUsage();
                    break;

                case OsFlavor.Linux:
                case OsFlavor.MacOS:
                    var loadAverages = _hostStat.GetLoadAverages();
                    stats["sys-loadavg-1m"]  = loadAverages.Average1m;
                    stats["sys-loadavg-5m"]  = loadAverages.Average5m;
                    stats["sys-loadavg-15m"] = loadAverages.Average15m;
                    break;

                default:
                    stats["sys-cpu"] = -1;
                    break;
                }

                stats["sys-freeMem"] = GetFreeMem();

                var gcStats = _eventCountersHelper.GetGcStats();
                stats["proc-gc-allocationSpeed"]   = gcStats.AllocationSpeed;
                stats["proc-gc-gen0ItemsCount"]    = gcStats.Gen0ItemsCount;
                stats["proc-gc-gen0Size"]          = gcStats.Gen0Size;
                stats["proc-gc-gen1ItemsCount"]    = gcStats.Gen1ItemsCount;
                stats["proc-gc-gen1Size"]          = gcStats.Gen1Size;
                stats["proc-gc-gen2ItemsCount"]    = gcStats.Gen2ItemsCount;
                stats["proc-gc-gen2Size"]          = gcStats.Gen2Size;
                stats["proc-gc-largeHeapSize"]     = gcStats.LargeHeapSize;
                stats["proc-gc-timeInGc"]          = gcStats.TimeInGc;
                stats["proc-gc-totalBytesInHeaps"] = gcStats.TotalBytesInHeaps;
            } catch (InvalidOperationException) {
                _log.Information("Received error reading counters. Attempting to rebuild.");
                _perfCounter = new PerfCounterHelper(_log);
                _giveup      = count > 10;
                if (_giveup)
                {
                    _log.Error("Maximum rebuild attempts reached. Giving up on rebuilds.");
                }
                else
                {
                    GetPerfCounterInformation(stats, count + 1);
                }
            }
        }
Esempio n. 7
0
        public override object GetValue(IDictionary <string, object> evt)
        {
            decimal cpuUtilization = (decimal)PerfCounterHelper.GetCurrentCpuCounter();

            return(cpuUtilization);
        }