Falha de segmentação no AWS Lambda

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

Ao usar o AWS Lambda em um contêiner Linux e chamar o método render várias vezes simultaneamente, às vezes ocorre a seguinte exceção.

Exceção:
Erro: O ambiente de execução foi encerrado com o seguinte erro: sinal: falha de segmentação Runtime.ExitError

Soluções

A solução é chamar o método GC.Collect após o documento PDF ser renderizado. Este problema foi relatado no Amazon Linux 2023 com versões recentes do IronPDF; implementações anteriores usando .NET 6 e Amazon Linux 2 não são afetadas.

// 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

Renderização Multi-Processo e wstring_convert::from_bytes Erros

Se GC.Collect() não resolver o problema, a causa raiz pode ser a renderização multiprocessos ou a reutilização global de ChromePdfRenderer dentro do contêiner Lambda. Isso produz uma falha de segmentação ou uma exceção C++:

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

Esses erros são intermitentes e podem aparecer apenas após a primeira ou segunda invocação do container Lambda.

Solução

Defina Installation.SingleProcess = true, redirecione caminhos para /tmp, e crie um novo ChromePdfRenderer por invocação:

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

Não chame Installation.Initialize() e não mantenha um ChromePdfRenderer como uma instância de nível fixo ou estática. Um renderer persistente carrega um estado de memória obsoleto para invocações subsequentes do Lambda e causa o travamento.

// 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
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 19,936,792 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronPdf
executar um exemplo Veja seu HTML se transformar em um PDF.