AWS Lambda Üzerinde Segment Hatası
Linux konteynerde AWS Lambda kullanırken ve aynı render yöntemini eş zamanlı birçok kez çağırırken bazen aşağıdaki istisna ortaya çıkar.
İstisna:
Hata: Çalışma zamanı hatasıyla çıkıldı: sinyal: segmentasyon hatası Runtime.ExitError
Çözümler
Çözüm, PDF belgesi rendelendikten sonra GC.Collect yöntemini çağırmaktır. Bu sorun, Amazon Linux 2023 üzerinde, yeni IronPDF sürümleriyle bildirilmiştir; önceki konuşlandırmalar .NET 6 ve Amazon Linux 2 kullanıyorsa etkilenmez.
// Create an instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML string to a PDF document
PdfDocument document = renderer.RenderHtmlAsPdf(htmlString);
// Explicitly trigger garbage collection to help manage memory usage
GC.Collect();
// Create an instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML string to a PDF document
PdfDocument document = renderer.RenderHtmlAsPdf(htmlString);
// Explicitly trigger garbage collection to help manage memory usage
GC.Collect();
' Create an instance of ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
' Render the HTML string to a PDF document
Dim document As PdfDocument = renderer.RenderHtmlAsPdf(htmlString)
' Explicitly trigger garbage collection to help manage memory usage
GC.Collect()
Çoklu İşlem İşleme ve wstring_convert::from_bytes Hataları
Eğer GC.Collect() sorunu çözmüyorsa, temel neden Lambda konteyneri içinde çok işlemli render işleme veya küresel ChromePdfRenderer yeniden kullanımı olabilir. Bu ya bir bellek bölütleme hatası ya da bir C++ istisnası üretir:
Process runtime-1 exited: signal: segmentation fault
Error while generating PDF from HTML: 'wstring_convert::from_bytes'
Bu hatalar aralıklıdır ve sadece birinci veya ikinci Lambda konteyner çağrısından sonra ortaya çıkabilir.
Çözüm
Installation.SingleProcess = true ayarlayın, yolları /tmp yönlendirin ve çağrı başına yeni bir ChromePdfRenderer oluşturun:
IronPdf.Installation.SingleProcess = true;
IronPdf.Installation.TempFolderPath = "/tmp";
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync(htmlString);
IronPdf.Installation.SingleProcess = true;
IronPdf.Installation.TempFolderPath = "/tmp";
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync(htmlString);
Imports IronPdf
IronPdf.Installation.SingleProcess = True
IronPdf.Installation.TempFolderPath = "/tmp"
Dim renderer As New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(htmlString)
Installation.Initialize() çağırmayın ve ChromePdfRenderer bir statik veya alan düzeyinde örnek olarak tutmayın. Kalıcı bir işlemci, eski bellek durumunu sonraki Lambda çağrılarına taşır ve çöküşe neden olur.
// Avoid: global renderer reuse
private readonly ChromePdfRenderer _renderer = new();
// Avoid: calling Initialize()
Installation.Initialize();
// Avoid: global renderer reuse
private readonly ChromePdfRenderer _renderer = new();
// Avoid: calling Initialize()
Installation.Initialize();

