Segmentierungsfehler bei AWS Lambda
Bei der Nutzung von AWS Lambda in einem Linux-Container und dem mehrmaligen gleichzeitigen Aufrufen der Render-Methode tritt manchmal die folgende Ausnahme auf.
Ausnahme:
Fehler: Laufzeit beendete mit Fehler: Signal: Segmentierungsfehler Laufzeit.Beendigungsfehler
Lösungen
Die Lösung besteht darin, die GC.Collect Methode aufzurufen, nachdem das PDF-Dokument gerendert wurde. Dieses Problem wurde auf Amazon Linux 2023 mit aktuellen IronPDF-Versionen berichtet; frühere Bereitstellungen mit .NET 6 und Amazon Linux 2 sind nicht betroffen.
// 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()Mehrprozess-Rendering und wstring_convert::from_bytes Fehler
Falls GC.Collect() das Problem nicht löst, könnte die Ursache das Multi-Prozess-Rendering oder die globale ChromePdfRenderer Wiederverwendung innerhalb des Lambda-Containers sein. Dies erzeugt entweder einen Segmentierungsfehler oder eine C++-Ausnahme:
Process runtime-1 exited: signal: segmentation fault
Error while generating PDF from HTML: 'wstring_convert::from_bytes'
Diese Fehler treten sporadisch auf und können erst nach dem ersten oder zweiten Lambda-Container-Aufruf auftreten.
Lösung
Setzen Sie Installation.SingleProcess = true, leiten Sie Pfade zu /tmp um und erstellen Sie ein neues ChromePdfRenderer pro Aufruf:
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)Rufen Sie Installation.Initialize() nicht auf und halten Sie kein ChromePdfRenderer als statische oder Feldebenen-Instanz. Ein persistenter Renderer nimmt alten Speicherzustand in nachfolgende Lambda-Aufrufe mit und verursacht den Absturz.
// Avoid: global renderer reuse
private readonly ChromePdfRenderer _renderer = new();
// Avoid: calling Initialize()
Installation.Initialize();net
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 Handbücher.