本次解决方案参考: https://blog.csdn.net/qq_37722992/article/details/112977147
背景:
线上用户出现预览pdf文件,以图片格式预览pdf异常,查看日志显示: java.lang.OutOfMemoryError: Java heap space
排查:
通过排查代码发现在
PDDocument.load(file)
这一步导致,简单测试增加内存后问题解决,但是用户线上没有这么大内存的空间,所以单纯的增大内存行不通。
解决:
增加参数
MemoryUsageSetting.setupTempFileOnly()
,将源pdf暂存在磁盘中,而非内存中。
PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly());
设置下采样
pdfRenderer.setSubsamplingAllowed(true);
//允许下采样