Faute de segmentation sur AWS Lambda

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

Lors de l'utilisation d'AWS Lambda dans un conteneur Linux et de l'appel de la méthode de rendu de manière concurrente de nombreuses fois, cela provoque parfois l'exception suivante.

Exception :
Erreur : l'exécution s'est arrêtée avec l'erreur : signal : erreur de segmentation Runtime.ExitError

Solutions

La solution consiste à appeler la méthode GC.Collect après que le document PDF ait été rendu. Ce problème a été signalé sur Amazon Linux 2023 avec les versions récentes d'IronPDF ; les déploiements antérieurs utilisant .NET 6 et Amazon Linux 2 ne sont pas affectés.

// 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()
$vbLabelText   $csharpLabel

Rendu multi-processus et erreurs wstring_convert::from_bytes

Si GC.Collect() ne résout pas le problème, la cause principale peut être le rendu multi-processus ou la réutilisation globale de ChromePdfRenderer dans le conteneur Lambda. Cela produit soit une faute de segmentation, soit une exception C++ :

Process runtime-1 exited: signal: segmentation fault
Error while generating PDF from HTML: 'wstring_convert::from_bytes'

Ces erreurs sont intermittentes et peuvent n'apparaître qu'après la première ou la deuxième invocation du conteneur Lambda.

Solution

Définissez Installation.SingleProcess = true, redirigez les chemins vers /tmp, et créez un nouveau ChromePdfRenderer par invocation :

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)
$vbLabelText   $csharpLabel

Ne pas appeler Installation.Initialize() et ne pas maintenir un ChromePdfRenderer comme instance statique ou au niveau du champ. Un moteur de rendu persistant porte un état mémoire obsolète dans les invocations Lambda suivantes, provoquant le plantage.

// 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();
$vbLabelText   $csharpLabel
Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer ?
Nuget Téléchargements 20,296,129 | Version : 2026.7 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronPdf
exécuter un échantillon Regardez votre code HTML se transformer en PDF.