odoo的数据库死锁,cron,lock,workers,高并发环境下的处理

2021-03-04 14:23:58

在一次客户真实环境中,我们遇到个问题,也算是小坑了,记录下。具体的表现是,大概1~2天,就会出现一次 odoo 无法访问,过上几分钟又好了。 跟踪查看 nginx 和 odoo 的 log,得知是数据库无法正常响应,还是比较少见的。 然后在 postgresql 的 log 里看到

  1. ERROR: could not obtain lock on row in relation "ir_cron"
  2. 2020-01-21 05:01:14.363 UTC [108807] STATEMENT: SELECT *
  3. FROM ir_cron
  4. WHERE numbercall != 0
  5. AND active
  6. AND nextcall <= (now() at time zone 'UTC')
  7. AND id=8
  8. FOR UPDATE NOWAIT

由于每次登录都要与第三方接口交互,也要保存些信息,为减少服务器负载,用了较短时间间隔的定时任务。从 log 中看出,这是数据库产生了死锁,没有正常释放。处理后解决。

调整了下配置,主要是odoo.conf 中的 max_cron_threads ,根据服务器资源和业务需求,将参数调整好后,故障就没再出现了。

所以要注意, odoo 的定时任务不少,特别是邮件。而且 cron 有锁机制,所以要用较多的线程来处理 cron ,同时要停止无效的 cron,调整好 cron 的时间间隔。

openerp.hk odoo openerp.hk

上一篇:

下一篇:

关于我们

运城信息社是领先的新闻资讯平台,汇集美食文化、教育科研、商旅生涯、国际资讯、综艺娱乐、生活百科、等多方面权威信息

版权信息

运城信息社版权所有,未经允许不可复制本站镜像,本站文章来源于网络,如有侵权请邮件举报!