Odoo14打印大量记录报表时Wkhtmltopdf报错(错误码-9)求助
解决Odoo 14 + Wkhtmltopdf 0.12.6打印大量记录报表报错(error code: -9)的方案
环境:Odoo Community Edition 14、Wkhtmltopdf 0.12.6(带patched qt)
问题:打印含超300条记录的报表(如标准销售订单报表)时,系统等待后报错:Wkhtmltopdf failed (error code: -9). Message: b"",所有报表记录量过大时都会触发该问题。已设置nginx的client_max_body_size为25M,且在Google及wkhtmltopdf官方issue区搜索未找到有效解决方案。
以下是针对性解决建议:
调整Wkhtmltopdf资源参数
Error code -9大多是进程内存不足被系统终止导致的,给wkhtmltopdf增加内存和缓存配额:
打开Odoo配置文件(比如/etc/odoo/odoo.conf),修改wkhtmltopdf_command配置:wkhtmltopdf_command = /usr/bin/wkhtmltopdf --enable-javascript --no-stop-slow-scripts --disable-smart-shrinking --memory-size 512000 --cache-size 512000其中
--memory-size和--cache-size单位为KB,这里设为512MB,可根据服务器内存情况上调。检查系统进程资源限制
系统可能对进程的内存、文件句柄等做了限制,导致wkhtmltopdf无法正常运行:- 查看当前Odoo运行用户的进程限制:
su - odoo -c "ulimit -a" - 如果
max memory size或virtual memory数值过小,编辑/etc/security/limits.conf,添加:odoo soft memlock unlimited odoo hard memlock unlimited odoo soft nofile 65536 odoo hard nofile 65536 - 重启Odoo服务和系统使配置生效。
- 查看当前Odoo运行用户的进程限制:
优化报表模板渲染逻辑
复杂的模板结构会加重wkhtmltopdf的渲染负担:- 删除报表中无用的动态计算、隐藏元素和冗余CSS样式;
- 对超长列表报表,尝试拆分渲染(比如按批次生成多页,避免一次性加载所有记录);
- 简化
t-foreach循环内的DOM结构,减少嵌套层级。
更换Wkhtmltopdf版本
0.12.6版本存在已知的内存泄漏问题,可尝试:- 升级到0.12.6的最新补丁版本;
- 切换到0.12.5版本(该版本对大报表的兼容性更稳定,注意选择带patched qt的安装包)。
延长Odoo报表生成超时时间
大报表生成耗时久,可能触发Odoo的超时机制:
在odoo.conf中添加或修改:report_timeout = 300设置为300秒(5分钟),可根据实际生成时长调整。
内容的提问来源于stack exchange,提问作者holydragon
相关产品推荐
相关产品推荐

