运城信息社是领先的新闻资讯平台,汇集美食文化、教育科研、商旅生涯、国际资讯、综艺娱乐、生活百科、等多方面权威信息
2021-03-04 14:23:58
在一次客户真实环境中,我们遇到个问题,也算是小坑了,记录下。具体的表现是,大概1~2天,就会出现一次 odoo 无法访问,过上几分钟又好了。 跟踪查看 nginx 和 odoo 的 log,得知是数据库无法正常响应,还是比较少见的。 然后在 postgresql 的 log 里看到
- ERROR: could not obtain lock on row in relation "ir_cron"
- 2020-01-21 05:01:14.363 UTC [108807] STATEMENT: SELECT *
- FROM ir_cron
- WHERE numbercall != 0
- AND active
- AND nextcall <= (now() at time zone 'UTC')
- AND id=8
- FOR UPDATE NOWAIT
由于每次登录都要与第三方接口交互,也要保存些信息,为减少服务器负载,用了较短时间间隔的定时任务。从 log 中看出,这是数据库产生了死锁,没有正常释放。处理后解决。
调整了下配置,主要是odoo.conf 中的 max_cron_threads ,根据服务器资源和业务需求,将参数调整好后,故障就没再出现了。
所以要注意, odoo 的定时任务不少,特别是邮件。而且 cron 有锁机制,所以要用较多的线程来处理 cron ,同时要停止无效的 cron,调整好 cron 的时间间隔。
openerp.hk odoo openerp.hk