Überwachung des .NET-Prozessspeichers in Linux/WSL

This article was translated from English: Does it need improvement?
Translated
View the article in English

Ressourcenintensive .NET-Arbeit, wie OCR, PDF-Erstellung oder Bildverarbeitung, kann in eingeschränkten Umgebungen wie WSL (Windows Subsystem für Linux) oder Linux-Containern schwer zu skalieren sein. Sie können den Speicherverbrauch eines Prozesses in Echtzeit direkt von einer Konsolenanwendung aus protokollieren oder ihn extern mit Standard-Linux-Tools überwachen.

Voraussetzungen

  • .NET-SDK installiert, Version 5.0 oder später.
  • Eine Linux-Umgebung, entweder nativ oder über WSL.
  • Eine grundlegende .NET-Konsolenanwendung.

Lösung

1. Speichernutzung in der Konsole protokollieren

Lesen Sie die private Speichergöße des Prozesses aus und drucken Sie sie in Megabyte aus:

using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Trigger your memory-consuming logic here (e.g., OCR, PDF generation, etc.)
// Log memory usage
Process currentProcess = Process.GetCurrentProcess();
long memorySize = currentProcess.PrivateMemorySize64; // In bytes
Console.WriteLine($"Memory Usage: {memorySize / (1024 * 1024)} MB");
}
}
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Trigger your memory-consuming logic here (e.g., OCR, PDF generation, etc.)
// Log memory usage
Process currentProcess = Process.GetCurrentProcess();
long memorySize = currentProcess.PrivateMemorySize64; // In bytes
Console.WriteLine($"Memory Usage: {memorySize / (1024 * 1024)} MB");
}
}
Imports System
Imports System.Diagnostics

Class Program
    Shared Sub Main(ByVal args As String())
        ' Trigger your memory-consuming logic here (e.g., OCR, PDF generation, etc.)
        ' Log memory usage
        Dim currentProcess As Process = Process.GetCurrentProcess()
        Dim memorySize As Long = currentProcess.PrivateMemorySize64 ' In bytes
        Console.WriteLine($"Memory Usage: {memorySize / (1024 * 1024)} MB")
    End Sub
End Class
$vbLabelText   $csharpLabel

PrivateMemorySize64 gibt die Menge des Speichers in Byte zurück, die der Prozess ausschließlich belegt und nicht mit anderen Prozessen teilt. Es ist ein solider Indikator dafür, wie stark Ihre Anwendung läuft.

2. Speichern kontinuierlich verfolgen

Für einen langlaufenden Prozess falten Sie das Lesen in eine Schleife ein, um die Nutzung im Laufe der Zeit zu erfassen:

while (true)
{
var memory = Process.GetCurrentProcess().PrivateMemorySize64;
Console.WriteLine($"Memory Usage: {memory / (1024 * 1024)} MB");
Thread.Sleep(5000); // Log every 5 seconds
}
while (true)
{
var memory = Process.GetCurrentProcess().PrivateMemorySize64;
Console.WriteLine($"Memory Usage: {memory / (1024 * 1024)} MB");
Thread.Sleep(5000); // Log every 5 seconds
}
Imports System.Diagnostics
Imports System.Threading

While True
    Dim memory = Process.GetCurrentProcess().PrivateMemorySize64
    Console.WriteLine($"Memory Usage: {memory / (1024 * 1024)} MB")
    Thread.Sleep(5000) ' Log every 5 seconds
End While
$vbLabelText   $csharpLabel

Der Thread.Sleep(5000)-Aufruf begrenzt das Logging auf eine Abfrage alle fünf Sekunden. Leiten Sie die Ausgabe an eine Datei oder einen anderen Prozess weiter oder verwenden Sie sie, um Alarme auszulösen, wenn die Nutzung einen Schwellenwert überschreitet.

Konsolenausgabe

Memory Usage: 214 MB

Option: Extern mit Linux-Tools überwachen

Um einen Prozess von außerhalb der Anwendung zu beobachten, verwenden Sie eines der Standard-Utilities. <pid> ist die Prozess-ID, die eindeutige Nummer, die das Betriebssystem jedem laufenden Prozess zuweist.

top oder htop: beobachten Sie einen einzelnen Prozess live.

top -p <pid>
top -p <pid>
SHELL

ps: Drucken Sie eine einmalige Momentaufnahme der Speicherfelder.

ps -o pid,vsz,rss,comm -p <pid>
ps -o pid,vsz,rss,comm -p <pid>
SHELL

Hier ist VSZ die Größe des virtuellen Speichers in KB und RSS ist die Resident Set Size, der physische Speicher in Nutzung.

smem: installieren Sie es für eine detailliertere prozessweise Aufschlüsselung.

sudo apt install smem
smem -p <pid>
sudo apt install smem
smem -p <pid>
SHELL

Bewährte Verfahren

  • Führern Sie die Speicherverfolgung in Testumgebungen durch, bevor Sie die Produktion einsetzen.
  • Für langlaufende Dienste oder APIs integrieren Sie einen Metrikstapel wie Prometheus oder Grafana.
  • Reservieren Sie GC.Collect() ausschließlich für das Debugging.

WarnungRufen Sie GC.Collect() nicht in Produktionscode auf; verwenden Sie es nur während des Debuggens.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 20,296,129 | Version: 2026.7 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronPdf
Führen Sie eine Probe aus Sehen Sie zu, wie Ihr HTML-Code in eine PDF-Datei umgewandelt wird.