Пример #1
0
        public IActionResult Monitor()
        {
            try
            {
                MemoryMetrics memoryMetrics = _machineInfo.GetMetrics();
                //var model = new SystemMonitor();
                //string RAMTotal = "";
                //if(memoryMetrics.RAMTotal> limit)
                //{

                //}


                string ProcessMemory = ((Double)Process.GetCurrentProcess().WorkingSet64 / 1048576).ToString("N2") + " MB";
                var    result        = new ResultAdaptDto();
                result.data.Add("model", memoryMetrics);
                result.data.Add("cpuRate", _machineInfo.GetCPURate());
                result.data.Add("runtime", _machineInfo.GetOSRunTime());
                result.data.Add("ProcessMemory", ProcessMemory);
                return(Data(result));
            }
            catch (Exception ex)
            {
                return(Error(ex.Message));
            }
        }
Пример #2
0
        private MemoryMetrics GetUnixMetrics()
        {
            var output = "";

            var info = new ProcessStartInfo("free -m");

            info.FileName  = "/bin/bash";
            info.Arguments = "-c \"free -m\"";
            info.RedirectStandardOutput = true;

            using (var process = Process.Start(info))
            {
                output = process.StandardOutput.ReadToEnd();
                Console.WriteLine(output);
            }

            var lines  = output.Split("\n");
            var memory = lines[1].Split(" ", StringSplitOptions.RemoveEmptyEntries);

            var metrics = new MemoryMetrics();

            metrics.Total = long.Parse(memory[1]);
            metrics.Used  = long.Parse(memory[2]);
            metrics.Free  = long.Parse(memory[3]);

            return(metrics);
        }
Пример #3
0
        private MemoryMetrics GetWindowsMetrics()
        {
            var output = "";

            var info = new ProcessStartInfo();

            info.FileName  = "wmic";
            info.Arguments = "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value";
            info.RedirectStandardOutput = true;

            using (var process = Process.Start(info))
            {
                output = process.StandardOutput.ReadToEnd();
            }

            var lines            = output.Trim().Split("\n");
            var freeMemoryParts  = lines[0].Split("=", StringSplitOptions.RemoveEmptyEntries);
            var totalMemoryParts = lines[1].Split("=", StringSplitOptions.RemoveEmptyEntries);

            var metrics = new MemoryMetrics();

            metrics.Total = long.Parse(totalMemoryParts[1]) * 1024; // Math.Round(/ 1024, 2);
            metrics.Free  = long.Parse(freeMemoryParts[1]) * 1024;  // Math.Round( / 1024, 2);
            metrics.Used  = metrics.Total - metrics.Free;

            return(metrics);
        }
Пример #4
0
        private static MemoryMetrics GetWindowsMetrics()
        {
            var output  = string.Empty;
            var metrics = new MemoryMetrics();

            var info = new ProcessStartInfo
            {
                FileName  = "wmic",
                Arguments = "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value",
                RedirectStandardOutput = true
            };

            using (var process = Process.Start(info))
            {
                if (process != null)
                {
                    output = process.StandardOutput.ReadToEnd();
                }
            }

            if (!string.IsNullOrEmpty(output))
            {
                var lines            = output.Trim().Split("\n");
                var freeMemoryParts  = lines[0].Split("=", StringSplitOptions.RemoveEmptyEntries);
                var totalMemoryParts = lines[1].Split("=", StringSplitOptions.RemoveEmptyEntries);

                metrics.Total = Math.Round(double.Parse(totalMemoryParts[1]) / 1024, 0);
                metrics.Free  = Math.Round(double.Parse(freeMemoryParts[1]) / 1024, 0);
                metrics.Used  = metrics.Total - metrics.Free;
            }

            return(metrics);
        }
Пример #5
0
        public Task <HealthCheckResult> CheckHealthAsync(
            HealthCheckContext context,
            CancellationToken cancellationToken = default)
        {
            var metrics = new MemoryMetrics();

            if (IsUnix)
            {
                var info = new ProcessStartInfo("free -m")
                {
                    FileName  = "/bin/bash",
                    Arguments = "-c \"free -m\"",
                    RedirectStandardOutput = true
                };

                using var process = Process.Start(info);
                string output = process.StandardOutput.ReadToEnd();

                var lines  = output.Split("\n");
                var memory = lines[1].Split(" ", StringSplitOptions.RemoveEmptyEntries);

                metrics.Total = double.Parse(memory[1]);
                metrics.Used  = double.Parse(memory[2]);
                metrics.Free  = double.Parse(memory[3]);
            }
            else
            {
                var info = new ProcessStartInfo
                {
                    FileName  = "wmic",
                    Arguments = "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value",
                    RedirectStandardOutput = true
                };

                using var process = Process.Start(info);
                string output = process.StandardOutput.ReadToEnd();

                var lines            = output.Trim().Split("\n");
                var freeMemoryParts  = lines[0].Split("=", StringSplitOptions.RemoveEmptyEntries);
                var totalMemoryParts = lines[1].Split("=", StringSplitOptions.RemoveEmptyEntries);

                metrics.Total = Math.Round(double.Parse(totalMemoryParts[1]) / 1024, 0);
                metrics.Free  = Math.Round(double.Parse(freeMemoryParts[1]) / 1024, 0);
                metrics.Used  = metrics.Total - metrics.Free;
            }

            if (metrics.Free <= _minimumFreeMegabytes)
            {
                return(Task.FromResult(
                           new HealthCheckResult(
                               context.Registration.FailureStatus,
                               description: $"The system is low on memory: {metrics.Free} mb of {metrics.Total} mb")));
            }

            return(Task.FromResult(HealthCheckResult.Healthy(description:
                                                             $"Free megabytes in memory: {metrics.Free} mb of {metrics.Total} mb")));
        }
Пример #6
0
        /// <summary>
        /// 获取内存信息
        /// </summary>
        /// <returns></returns>
        private static MemoryMetrics GetMemoryMetrics()
        {
            if (_osMetrics.IsUnix)
            {
                return(GetUnixMetrics());
            }
            return(GetWindowsMetrics());

            MemoryMetrics GetWindowsMetrics()
            {
                string output = ShellHelper.Cmd("wmic", "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value");

                var lines            = output.Trim().Split("\n");
                var freeMemoryParts  = lines[0].Split("=", StringSplitOptions.RemoveEmptyEntries);
                var totalMemoryParts = lines[1].Split("=", StringSplitOptions.RemoveEmptyEntries);

                double total = Math.Round(double.Parse(totalMemoryParts[1]) / 1024, 0);
                double free  = Math.Round(double.Parse(freeMemoryParts[1]) / 1024, 0);

                var metrics = new MemoryMetrics
                {
                    Total = Math.Ceiling(total / 1024) + " GB",
                    Free  = Math.Ceiling(free / 1024) + " GB",
                    Used  = Math.Round((total - free) / total * 100, 0) + " %"
                };

                return(metrics);
            }

            MemoryMetrics GetUnixMetrics()
            {
                string output = ShellHelper.Bash("free -m");

                var lines  = output.Split("\n");
                var memory = lines[1].Split(" ", StringSplitOptions.RemoveEmptyEntries);

                double total = double.Parse(memory[1]);
                double used  = double.Parse(memory[2]);

                var metrics = new MemoryMetrics
                {
                    Total = Math.Ceiling(total / 1024) + " GB",
                    Used  = Math.Round((used / total) * 100, 0) + " %",
                    Free  = Math.Ceiling((total - used) / 1024) + " GB"
                };

                return(metrics);
            }
        }
Пример #7
0
        private MemoryMetrics GetMemoryMetrics()
        {
            var result           = new MemoryMetrics();
            var memoryInfoResult = Server.MetricCacher.GetValue <MemoryInfoResult>(MetricCacher.Keys.Server.MemoryInfoExtended);

            result.InstalledMemoryInMb = memoryInfoResult.InstalledMemory.GetValue(SizeUnit.Megabytes);
            result.PhysicalMemoryInMb  = memoryInfoResult.TotalPhysicalMemory.GetValue(SizeUnit.Megabytes);
            result.AllocatedMemoryInMb = memoryInfoResult.WorkingSet.GetValue(SizeUnit.Megabytes);
            result.LowMemorySeverity   = LowMemoryNotification.Instance.IsLowMemory(memoryInfoResult,
                                                                                    new LowMemoryMonitor(), out _);

            result.TotalSwapSizeInMb       = memoryInfoResult.TotalSwapSize.GetValue(SizeUnit.Megabytes);
            result.TotalSwapUsageInMb      = memoryInfoResult.TotalSwapUsage.GetValue(SizeUnit.Megabytes);
            result.WorkingSetSwapUsageInMb = memoryInfoResult.WorkingSetSwapUsage.GetValue(SizeUnit.Megabytes);

            var totalDirtyInBytes = MemoryInformation.GetDirtyMemoryState().TotalDirtyInBytes;

            result.TotalDirtyInMb = new Size(totalDirtyInBytes, SizeUnit.Bytes).GetValue(SizeUnit.Megabytes);

            return(result);
        }
Пример #8
0
        public Task <Message> GetAsync(MemoryMetrics memoryMetrics)
        {
            if (memoryMetrics == null)
            {
                throw new NullReferenceException(nameof(memoryMetrics));
            }

            var test   = this.config.Value.Test;
            var config = this.config.Value.Memory;

            this.logger.LogDebug($"Test={test} {config.Debug} {memoryMetrics.Debug}");

            var usage = Math.Round(100 * memoryMetrics.Used / memoryMetrics.Total);
            var maxPercentageUsage = config.MaxPercentageUsage;
            var warning            = usage > maxPercentageUsage;
            var send = config.ReportMode || warning || test;

            Message message = null;

            if (send)
            {
                var title = (warning ? "Warning - " : "") + "RAM Memory";
                var nl    = "".NL();
                var lines = new List <string>();

                if (warning)
                {
                    lines.Add($"RAM memory {usage}% consumed!{nl}{nl}");
                }

                lines.Add($"Total: {memoryMetrics.Total.BytesToString()}");
                lines.Add($"Used: {memoryMetrics.Used.BytesToString()}");
                lines.Add($"Free: {memoryMetrics.Free.BytesToString()}");
                message = new Message {
                    Title = title, Content = string.Join(nl, lines)
                };
            }
            return(Task.FromResult(message));
        }
Пример #9
0
        private static MemoryMetrics GetUnixMetrics()
        {
            var output  = string.Empty;
            var metrics = new MemoryMetrics();

            var info = new ProcessStartInfo("free -m")
            {
                FileName  = "bash",
                Arguments = "-c \"free -m\"",
                RedirectStandardOutput = true
            };

            using (var process = Process.Start(info))
            {
                if (process != null)
                {
                    output = process.StandardOutput.ReadToEnd();
                }
                Console.WriteLine(output);
            }

            if (!string.IsNullOrEmpty(output))
            {
                var lines = output.Trim().Split("\n");

                // Split Free Command Results
                var value2 = System.Text.RegularExpressions.Regex.Split(lines[1], @"\s\s+");

                var freeMemory  = value2.Length == 7 ? value2[3] : "0";
                var totalMemory = value2.Length == 7 ? value2[1] : "0";

                metrics.Total = Math.Round(double.Parse(totalMemory) / 1024, 0);
                metrics.Free  = Math.Round(double.Parse(freeMemory) / 1024, 0);
                metrics.Used  = metrics.Total - metrics.Free;
            }

            return(metrics);
        }
Пример #10
0
        public void MemoryMetrics()
        {
            MemoryMetrics metrics = Runtime.GetMemoryMetrics();

            Assert.True(metrics != null);
        }
Пример #11
0
 public void Mock_GetMemoryMetrics(MemoryMetrics response)
 {
     this.Mock
     .Setup(x => x.GetMemoryMetricsAsync())
     .ReturnsAsync(response);
 }
Пример #12
0
 public SystemMetrics(CpuMetrics cpu, MemoryMetrics memory)
 {
     Cpu    = cpu;
     Memory = memory;
 }