Как иметь способ осведомленного CGROUP для захвата процессора и памяти в приложении DotNet?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как иметь способ осведомленного CGROUP для захвата процессора и памяти в приложении DotNet?

Сообщение Anonymous »

Все, что я хочу сделать, это иметь способ, осведомленное о CGROUP для захвата процессора и использования памяти в моем приложении C#, и это было очень сложно. Существует пакет под названием microsoft.extensions.diagnostics.resourcemonitoring , который содержал интерфейс iresourcemonitor , который предоставил контракт на это, и, казалось, работал, хотя он никогда не соответствовал тому, какие инструменты, такие как статистика Docker . Проблема в том, что Iresourcemonitor теперь помечен как устаревший. Это было так просто: < /p>

Код: Выделить всё

// Monitor is IResourceMonitor and gets registered in DI
var utilization = monitor.GetUtilization(TimeSpan.FromSeconds(3));
var resources = utilization.SystemResources;
// Use various properties from utilization and resources for CPU and memory usage
Но iresourcemonitor устарел этим сообщением:

Код: Выделить всё

EXTOBS0001: Interface 'Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitor' is obsolete: 'This API is obsolete and will be removed in a future version. Consider using Resource Monitoring observable instruments.'
Не знаком с сбором метрик и всеми связанными соглашениями об именовании, я пытался исследовать и использовать System.diagnostics.metrics Но это не работает для меня:
var listener = new MeterListener();

listener.InstrumentPublished = (instrument, l) =>
l.EnableMeasurementEvents(instrument);
};

listener.SetMeasurementEventCallback((instrument, value, tags, state) =>
{
Console.WriteLine($"[LONG] {instrument.Name} = {value} {instrument.Unit}");
});

listener.SetMeasurementEventCallback((instrument, value, tags, state) =>
{
Console.WriteLine($"[DOUBLE] {instrument.Name} = {value:F2} {instrument.Unit}");
});

listener.Start();

Console.WriteLine("Listening for metrics... Press Ctrl+C to exit.");

List memory = [];
while (true)
{
var array = new byte[1024];

var index = Random.Shared.Next(array.Length);

array[index] = (byte)Random.Shared.Next(0, 255); // Touch memory to make sure it's being used

Console.WriteLine(array[index]);

memory.Add(array); // Keep adding memory

await Task.Delay(TimeSpan.FromSeconds(3));
}
< /code>
Я пробовал это в Windows и Linux (и в контейнере Linux), и обратные вызовы никогда не вызываются, даже если я вижу, что все события измерения включены. Все, что я хочу сделать, это получить процессор и использование памяти, и кажется, что это сложнее или вовлечено, чем я думал. Может ли кто -нибудь, пожалуйста, предоставить некоторое руководство о том, что я делаю не так, или лучший способ сделать это без необходимости запечатлеть метрики самостоятельно? (т.е. я не хочу писать и поддерживать код, который запрашивает файловую систему cgroup)

Подробнее здесь: https://stackoverflow.com/questions/796 ... et-applica
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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