AWS Lambda에서 세그멘테이션 오류 발생
AWS Lambda를 Linux 컨테이너에서 사용하고 렌더링 메서드를 여러 번 동시에 호출할 때 다음과 같은 예외가 발생하는 경우가 있습니다.
예외:
오류: 런타임이 오류와 함께 종료되었습니다. 신호: 세그멘테이션 오류 Runtime.ExitError
솔루션
해결책은 PDF 문서가 렌더링된 후 GC.Collect 메서드를 호출하는 것입니다. 이 문제는 최근 IronPDF 버전에서 Amazon Linux 2023에서 보고되었습니다; .NET 6 및 Amazon Linux 2를 사용하는 이전 배포는 영향을 받지 않습니다.
// 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()
다중 프로세스 렌더링 및 wstring_convert::from_bytes 오류
GC.Collect()가 문제를 해결하지 못한다면, 근본 원인은 다중 프로세스 렌더링이나 Lambda 컨테이너 내에서 글로벌 ChromePdfRenderer 재사용일 수 있습니다. 이로 인해 세그먼트 결함이나 C++ 예외가 발생합니다:
Process runtime-1 exited: signal: segmentation fault
Error while generating PDF from HTML: 'wstring_convert::from_bytes'
이 오류는 간헐적으로 발생하며, 첫 번째 또는 두 번째 Lambda 컨테이너 호출 이후에만 나타날 수 있습니다.
해결책
Installation.SingleProcess = true을 설정하고 경로를 /tmp로 리디렉션하며, 호출당 새로운 ChromePdfRenderer을 생성하세요:
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()을 호출하지 말고 ChromePdfRenderer을 정적 또는 필드 수준의 인스턴스로 유지하지 마세요. 지속적인 렌더러는 다음 Lambda 호출에서 오래된 메모리 상태를 가져와 크래시를 유발합니다.
// 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();

