Odoo 14 CE打印超150页报表wkhtmltopdf报错误码-11问题咨询
报错原因前置说明
Wkhtmltopdf错误码-11属于段错误,多由程序本身内存访问异常触发,你当前的系统内存、ulimit配置、Odoo内存参数均满足大报表转换要求,问题优先指向wkhtmltopdf版本bug或Odoo子进程资源限制。
排查步骤
- 独立测试wkhtmltopdf转换能力:从Odoo中导出150+页报表对应的HTML源文件,在服务器命令行直接执行转换命令
wkhtmltopdf [HTML文件路径] [输出PDF路径],若命令行直接转换也触发-11报错,可排除Odoo配置问题,问题锁定在wkhtmltopdf本身。 - 检查Odoo服务的系统资源限制:若你使用systemd管理Odoo服务,执行
systemctl show odoo.service | grep -E "LimitNOFILE|LimitNPROC",确认返回值和系统ulimit配置一致,避免服务单独限制了子进程可打开的文件数。 - 检查报表内容复杂度:确认报表是否包含大量未压缩高清图片、嵌套层级过深的表格、冗余的CSS/JS代码,这类内容会大幅提升wkhtmltopdf的转换开销,触发多页场景下的异常。
解决方案
- 优先升级wkhtmltopdf版本:你当前使用的0.12.5版本存在多页转换场景下的已知段错误bug,直接升级到0.12.6(带patched qt)版本即可解决绝大多数该类报错。安装完成后执行
wkhtmltopdf --version确认版本生效,再测试大报表打印。 - 调整Odoo运行配置:
- 在Odoo配置文件中新增参数
limit_time_real = 1200,单位为秒,拉长报表转换的超时阈值,避免大文件转换过程中被Odoo主动kill。 - 若systemd服务存在资源限制,在odoo.service的[Service]段添加
LimitNOFILE=200000,修改完成后执行systemctl daemon-reload && systemctl restart odoo.service生效。
- 在Odoo配置文件中新增参数
- 优化报表模板:
- 压缩报表内所有图片,单张图片大小控制在200KB以内。
- 移除报表模板中不必要的JS代码、冗余CSS样式,简化表格嵌套层级。
- 超大报表可拆分生成多个小PDF后再合并,避免单次转换页数超过100页。
- 兜底重试机制:如果升级版本后仍有偶发报错,可以修改Odoo源码中调用wkhtmltopdf的逻辑,捕获错误码-11后自动重试1-2次,大部分偶发段错误重试后即可转换成功。
内容的提问来源于stack exchange,提问作者Anand Mohan
相关产品推荐
相关产品推荐

