Linux/WSL'de .NET Süreç Hafızasını İzleme

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

Hafıza açısından yoğun .NET işleri, örneğin OCR, PDF oluşturma veya resim işleme, WSL (Windows Subsystem for Linux) veya Linux konteynerleri gibi kısıtlı ortamlarda boyutlandırılması zor olabilir. Bir sürecin hafıza tüketimini gerçek zamanlı olarak doğrudan bir konsol uygulamasından kaydedebilir veya standart Linux araçlarıyla dışarıdan izleyebilirsiniz.

Gereksinimler

  • .NET SDK yüklü, sürüm 5.0 veya daha yeni.
  • Bir Linux ortamı, ya yerel ya da WSL üzerinden.
  • Temel bir .NET konsol uygulaması.

Çözüm

1. Konsola hafıza kullanımı kaydet

Sürecin özel hafıza boyutunu okuyun ve megabaytlar cinsinden yazdırın:

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, işlemin münhasır olarak tahsis ettiği ve diğer işlemlerle paylaşmadığı bellek miktarını bayt olarak döndürür. Uygulamanızın ne kadar ağır çalıştığını gösteren sağlam bir gösterge.

2. Hafızayı sürekli olarak izleyin

Uzun süre çalışan bir süreç için, okuma işlemine bir döngü içinde yer verin ve zaman içinde kullanımı örnekleme:

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

Thread.Sleep(5000) çağrısı, her beş saniyede bir okumaya yönelik olarak günlüklemeyi ayarlar. Çıktıyı bir dosyaya ya da başka bir sürece aktaran ya da kullanım bir eşiği geçtiğinde uyarıları tetiklemek için kullanan bir yöntem.

Konsol Çıkış

Memory Usage: 214 MB

Seçenek: Linux araçlarıyla harici olarak izleyin

Uygulama dışındaki bir süreç izlemek için standart yardımcı programlardan birini kullanın. <pid>, İşlem Kimliği, işletim sisteminin her çalışan işleme atadığı benzersiz sayıdır.

top veya htop: tek bir süreci canlı olarak izleyin.

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

ps: bellek alanlarının tek seferlik bir anlık görüntüsünü yazdır.

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

Burada VSZ sanal bellek boyutu KB olarak ve RSS yerleşik küme boyutudur, kullanılan fiziksel bellek.

smem: daha ayrıntılı bir işlem başına analiz için yükleyin.

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

En İyi Uygulamalar

  • Bellek izleme işlemini üretime göndermeden önce test ortamlarında çalıştırın.
  • Uzun süre çalışan hizmetler veya API'ler için Prometheus veya Grafana gibi bir metrik yığını entegre edin.
  • Sadece hata ayıklama için GC.Collect() ayırın.

UyarıGC.Collect() komutunu üretim kodunda çağırmaktan kaçının; sadece hata ayıklama sırasında kullanın.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 20,296,129 | Sürüm: 2026.7 yeni yayınlandı
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.