IRONSOFTWAREHOME

Uzun Süre Çalışan Uygulamalarda CEF/Chromium Bellek Kullanımı

Curtis Chau
Curtis Chau
Updated: 17 Eylül 2026

IronPDF Chromium ile oluşturur, bu nedenle belgeler serbest bırakıldığında ve GC.Collect() çalıştığında bile PDF oluşturma işleminden sonra işlem belleği kısa bir süre yüksek kalabilir. İki kaynak etkili: Chromium'un yönetilmeyen yerleşik tahsisi ve IronPDF'nin tarayıcı sekmesi havuzu. Çoğu durumda bu beklendiği gibi olur ve otomatik olarak bir bellek sızıntısı anlamına gelmez.

Bu, IronPDF ve Windows ve Linux'ta IronPdfEngine, Docker, Kubernetes, VM ve sunucu barındırılan ortamlar genelinde ve Chromium tabanlı oluşturma kullanan .NET, Java ve her türlü uygulama için geçerlidir.

Bellek Neden Yüksek Kalır

İşleme bitişinden sonra bellek yüksek tutan iki farklı mekanizma bulunmaktadır.

Chromium yerel tahsis tutumu: Chromium, .NET çöp toplayıcı dışında yaşayan büyük miktarda yönetilmeyen bellek kullanır. Bir işleme tamamlandığında, Chromium bu yerel belleği yeniden kullanım için genellikle OS'ye hemen geri vermez. Bu nedenle PdfDocument nesneleriniz düzgün şekilde serbest bırakılabilir, çalışma zamanı yönetilen nesneleri toplayabilir ve genel işlem veya konteyner belleği hâlâ yüksek okunabilir. Bu, Chromium tabanlı motorlar için normaldir.

TarayıcıHavuzu sekme yeniden kullanımı: IronPDF, bir işleme bittikten sonra yeni bir işleme daha hızlı başlamak için boşta tarayıcı sekmelerini canlı tutabilir. Bu sekmeler, kendi işleme alt süreçlerini ve DOM durumlarını kısa bir süre tutar, bu da hiçbir şey işlenmiyorken bile görülebilir bir bellek taban çizgisi oluşturur. Havuzlama açıldığında, genellikle belleğin işleme sırasında yükseldiğini, işleme bittikten sonra bir taban çizgisinde tutulduğunu ve daha sonra boşta kalan sekmeler zaman aşımına uğradıkça ve toplanana kadar aşamalar halinde düştüğünü göreceksiniz.

GC.Collect() Neden Yardımcı Olmaz

GC.Collect() yalnızca yönetilen .NET belleğini geri kazanır. Chromium'un yerel belleği OS'ye geri vermesini zorlamaz ve bilerek canlı tutulan sıcak TarayıcıHavuzu sekmelerini yıkmaz. Doğru şekilde serbest bırakma ve zorunlu bir toplama ile bile, Görev Yöneticisi, Docker, Kubernetes veya New Relic gibi araçlarla gösterilen rakamlar hemen düşmeyebilir.

Etkisi en çok uzun süre çalışan uygulamalarda, paylaşılan hizmet ortamlarında ve Docker veya Kubernetes dağıtımlarında görülür. Java entegrasyonları için IronPdfEngine kullanılırken, baskı genellikle JVM yığını yerine motor işleminde veya konteynırda ortaya çıkar.

TarayıcıHavuzu Varsayılanları

IronPDF, performansı arttırmak için işleme arasındaki bir küçük sayıda sekmeyi sıcak tutar. Varsayılanlar şunlardır:

  • BrowserPool.Enabled = true
  • BrowserPool.MaxIdleTabs = min(max(ProcessorCount / 2, 1), 4)
  • BrowserPool.IdleTimeoutSeconds = 30

Bu yüzden, aktif işleme olmadan bile süreç, yaklaşık 30 saniye boyunca son işleme sonrası aşamalar halinde düşmeden önce 1 ila 4 boşta kalan sekmeyi bir süre sıcak tutabilir, her biri yerel bellek ve alt süreç kaynaklarını boşta kalma zaman aşım süresi dolana kadar tutar. İşlenen içeriğe ve ortama bağlı olarak, bir boşta kalan sekme, bazı iş yüklerinde yaklaşık 50 ila 100 MB arasında fark edilebilir bir miktar tutabilir. Bu yükseltilmiş tabana çizgisi, yaklaşık 30 saniye son işleme bittikten sonra adım adım düşmeden önce kalıcı olabilir.

Çözüm

Ortamınız bellek kısıtlıysa, TarayıcıHavuzu ayarları ilk ayarlanacak şeydir. Varsayılanlar bu şekilde görünür:

renderer.RenderingOptions.BrowserPool.Enabled = true; // default
renderer.RenderingOptions.BrowserPool.MaxIdleTabs = 2; // default is CPU/2, clamped to 1-4
renderer.RenderingOptions.BrowserPool.IdleTimeoutSeconds = 30; // default
C#

Seçenek 1: Sekme Havuzlamayı Tamamen Devre Dışı Bırakma

Her bir işleme sonrasında en belirleyici temizliği istediğinizde ulaşın.

renderer.RenderingOptions.BrowserPool.Enabled = false;
C#

Seçenek 2: Boşta Kalan Sekmeleri Tutmadan TarayıcıHavuzunu Etkinleştirme

Özelliği açık bırakır, ancak işleme arasındaki sıcak sekmeleri tutmaktan kaçınır ve her işleme için belirleyici bir temizlik sağlar.

renderer.RenderingOptions.BrowserPool.MaxIdleTabs = 0;
C#

Seçenek 3: Boşta Kalma Zaman Aşımını Azaltma

Orta bir yol: bir miktar yeniden kullanma avantajı sağlar, ancak bellek daha önce patlak trafik sonrasında azalmaya bırakılır.

renderer.RenderingOptions.BrowserPool.IdleTimeoutSeconds = 10;
C#

Aralarından nasıl seçim yapılır:

  • Enabled = false: bellek kararlılığı, sıcak başlangıç performansından daha önemlidir.
  • MaxIdleTabs = 0: özelliği tamamen devre dışı bırakmadan belirleyici her oluşturma sonrası temizlik istiyorsunuz.
  • Alt IdleTimeoutSeconds: iş yükünüz patlamalar halinde gelir ve her birinden sonra belleğin daha hızlı geri kazanılmasını istiyorsunuz.

Uzun Süreli Uygulamalar için Stratejiler

Uygulamanızın belleği tutarlı olarak düşük tutması gerekiyorsa, işlem yenilemeye gitmeden önce yukarıdaki sırasında başlayarak, TarayıcıHavuzu ayarlarıyla başlar.

1. Eşzamanlı İşlemleri Sınırlandırma

Birden fazla Chromium işleme işi bir anda çalıştırmak, yerel bellek baskısını keskin bir şekilde artırır. Paralel işliyorsanız, kaç tanesinin eşzamanlı olarak çalıştığını bir semaforla sınırlayın:

private static readonly SemaphoreSlim RenderSemaphore = new(2);
public async Task<t> RunRenderAsync<t>(Func<t> renderWork)
{
    await RenderSemaphore.WaitAsync();
    try
    {
        return renderWork();
    }
    finally
    {
        RenderSemaphore.Release();
    }
}
C#

IronPDF işleme çağrınızı kısıtlanmış bölümün içine sarın, böylece aynı anda yalnızca sabit sayıda iş çalışır.

2. TarayıcıHavuzunu Ayarlayın veya Devre Dışı Bırakın

Birçok bellek hassas dağıtımı için bu en etkili ilk adımdır. BrowserPool'u tamamen devre dışı bırakın, MaxIdleTabs = 0 belirleyin veya patlamalı iş yükleri için IdleTimeoutSeconds azaltın. Bunlardan herhangi biri, tam bir yeniden başlatma stratejisi olmadan kalıcı post-işleme taban çizgisini küçültebilir.

3. İşlemeyi Ayrı Bir İşçiye İzole Etme

Üretim sistemleri için PDF işlemesini ana uygulamadan çıkarma güçlü bir patern. Ana uygulama stabil kalır, işleme işçisi kendi başına yeniden başlatılabilir ve işçi çıktığında yerel Chromium belleği tamamen serbest bırakılır. Geri dönüşümü kullanmadan önce, BrowserPool'u devre dışı bırakmanın veya MaxIdleTabs = 0 belirlemenin zaten belirleyici her oluşturmada temizlik sağladığından emin olun. İzolasyon yaklaşımı, Docker veya Kubernetes ortamlarında, arka plan iş sistemlerinde ve daha sıkı bellek izolasyonuna ihtiyaç duyan API platformlarında en iyi sonucu verir.

4. İşçiyi Yalnızca Gerekli Olduğunda Yeniden Başlatma

Katı bir bellek sınırı olduğunda ve TarayıcıHavuzu ayarlamaları hala yetersiz kalıyorsa, belirli bir iş sayısından sonra işleme süreci veya işçi konteynerini yeniden başlatın. Bu, sabit bir iş yığınından sonra özel bir işçiyi yeniden başlatmak, Kubernetes'te motor konteynerlerini döndürmek veya bir hizmete işleme izole etmeyi ve bağımsız olarak yeniden başlatılabilir hale getirmeyi gerektirebilir. Bunu bir gecikmiş adım olarak düşünün, ilk hareketiniz değil.

Bir Sızıntı Olabileceği Zamanlar

İşleme sonrası yükseltilmiş bellek, otomatik olarak bir sızıntı anlamına gelmez. Chromium tabanlı işleme, iki tür yeniden kullanım içerir: tahsis edici seviyede yeniden kullanım, burada Chromium dahili olarak yerel bellek sayfalarını rezerve eder (normal, doğrudan denetlenemez) ve sekme seviyesinde yeniden kullanım, burada TarayıcıHavuzu, işlemler arasında tam sekmeler canlı tutar (yapılandırılabilir ve genellikle izleme araçlarında gördüğünüz en büyük katkıcı).

Desen, genellikle işleme sırasında bellek yükselirse, sınır büyümeksizin stabilize olursa, kısa bir süre yüksek kalırsa ve daha sonra boşta kalan sekmeler zaman aşımına uğradığında veya bir sonraki işleme için kullanılabilir kaldığında düşmesi beklenir.

Daha fazla araştırın:

  • bellek, benzer bir iş yükü altında stabil olmaksızın sürekli artıyorsa
  • eşzamanlılığı azaltmasına rağmen bellek büyümeye devam ediyorsa
  • BrowserPool devre dışı bırakıldıktan veya MaxIdleTabs = 0 ayarlandıktan sonra bile bellek büyümeye devam ediyor
  • kontrollü bir giriş ile aynı deseni zamanla gösteren minimal bir üretim gösteriyorsa

Destekle Ne Zaman İrtibata Geçilmeli

Tüm aşağıdakileri tekrar üretebiliyorsanız, teknik destek ile iletişime geçin:

  1. bellek, kontrollü bir iş yükü altında stabil olmaksızın büyümeye devam ediyorsa
  2. eşzamanlılığı sınırladıktan sonra sorun devam ediyorsa
  3. sorun, BrowserPool devre dışı bırakıldıktan veya MaxIdleTabs = 0 ayarlandıktan sonra devam ediyor
  4. Minimal bir örnek proje ile tekrarlayabiliyorsanız.

Bir bilet açarken, IronPDF sürümünüzü, işletim sistemi ve barındırma ortamınızı, Docker veya Kubernetes ayrıntılarını (varsa), programlama dilinizi, işleme sıklığı ve eşzamanlılık seviyenizi, bellek grafiklerinizi veya izleme ekran görüntülerini ve minimal yeniden üretilebilir bir örnek dosyayı ekleyin.

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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

Başlamaya Hazır mısınız?

Nuget Downloads 21,105,021Sürüm:2026.9yeni yayınlandı

Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez
PDF için C# NuGet Kütüphanesi
NuGet ile yükleyin

Sürüm: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. Çözüm Gezgini'nde Referanslar'a sağ tıklayın, NuGet Paketlerini Yönet
  2. Tarayıcıya tıklayın ve "IronPdf" arayın
  3. Paketi seçin ve yükleyin
C# PDF DLL
DLL İndir

Sürüm: 2026.9

veya Windows Yükleyiciyi şuradan buradan indirin.

  1. IronPDF'i, ~/Libs gibi bir yere, Solution dizininiz içinde indirin ve açın.
  2. Visual Studio Çözüm Gezgini'nde, Referanslar'a sağ tıklayın. Tarayıcı sekmesini seçin, "IronPdf.dll"

Lisanslar $999

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

OR
bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez
PDF için C# NuGet Kütüphanesi
NuGet ile yükleyin

Sürüm: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. Çözüm Gezgini'nde Referanslar'a sağ tıklayın, NuGet Paketlerini Yönet
  2. Tarayıcıya tıklayın ve "IronPdf" arayın
  3. Paketi seçin ve yükleyin
C# PDF DLL
DLL İndir

Sürüm: 2026.9

veya Windows Yükleyiciyi şuradan buradan indirin.

  1. IronPDF'i, ~/Libs gibi bir yere, Solution dizininiz içinde indirin ve açın.
  2. Visual Studio Çözüm Gezgini'nde, Referanslar'a sağ tıklayın. Tarayıcı sekmesini seçin, "IronPdf.dll"

Lisanslar $999