Falha de segmentação no AWS Lambda
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()
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)
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();

