You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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无法正常运行:

    1. 查看当前Odoo运行用户的进程限制:
      su - odoo -c "ulimit -a"
      
    2. 如果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
      
    3. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:19:51