Текущий процент использования ЦП Linux в C#C#

Место общения программистов C#
Ответить
Anonymous
 Текущий процент использования ЦП Linux в C#

Сообщение Anonymous »

Я пытаюсь сообщить об общей загрузке ЦП в системе Linux. Он сообщает каждые 10 секунд. У меня есть несколько процессов, запущенных в нескольких докерах, поэтому запуск Process.GetProcesses() привел к ошибке, связанной с невозможностью получить указанную информацию о процессе. возможно, он завершил работу или имеет привилегии. На моем компьютере 12 процессоров и по 2 на каждый поток:
Изображение
это означает, что он использует 6 ядер. Мне нужен эффективный способ расчета текущего использования ЦП всем компьютером в данный момент времени.
Мои попытки были:
TimeSpan delta = DateTime.Now - _lastTimeBuildReport;

double cpuLoad = 100* (currentExporterDic["node_cpu_seconds_total"].GetSum("idle") - _previousExporterDic["node_cpu_seconds_total"].GetSum("idle")) / delta.TotalSeconds;
Это дало мне странные значения (в 3 раза больше реальных)
И это привело к ошибке после ASP.NET CORE LINUX Get CPU USAGE
private double CalculateToTotalCPUUsage(double totalMsPassed)
{
try
{
double totalCpuUsagePercentage = 0;
string getProccesorsCoresCMD = "grep 'cpu cores' /proc/cpuinfo | uniq | grep -Eo '[0-9]{1,4}'";
string[] coresLines = DotNetUtilities.DotNetUtilities.GetOsCmdLineOutput(getProccesorsCoresCMD).Lines;
int cpuCores = int.Parse(coresLines[0]);
Process[] allProc = Process.GetProcesses();
foreach (Process process in allProc)
{
// Start watching CPU
var currentProStartCpuUsage = process.TotalProcessorTime;

//Delay the function so we can measure the same CPU load

Task.Delay(Convert.ToInt32(totalMsPassed)).Wait();
var currentProEndCpuUsage = process.TotalProcessorTime;
var currentProCpuUsedMs = (currentProEndCpuUsage - currentProStartCpuUsage).TotalMilliseconds;
var currentProCpuUsageTotal = currentProCpuUsedMs / (cpuCores * totalMsPassed);
var currentProCpuUsagePercentage = currentProCpuUsageTotal * 100;
totalCpuUsagePercentage += currentProCpuUsagePercentage;
}

return totalCpuUsagePercentage;
}
catch (Exception ex)
{
Logger.LogError($"Couldn't calculate total CPU usage. Reason: {ex.Message} {ex.StackTrace}");
return -1;
}
}


Подробнее здесь: https://stackoverflow.com/questions/749 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»