一个Odoo14服务频繁崩溃的案例
- 
Odoo14,操作系统Ubuntu18.04 
 系统现象:正在使用的生产环境中的Odoo服务频繁崩溃,一天需要重启服务器多次。
 通过查看日志,发现下列异常记录:
 2021-04-15 12:59:11,665 27426 WARNING ? odoo.service.server: Thread <Thread(odoo.service.http.request.140616848307968, started 140616848307968)> virtual real time limit (137/120s) reached.
 2021-04-15 12:59:11,665 27426 INFO ? odoo.service.server: Dumping stacktrace of limit exceeding threads before reloading
 2021-04-15 12:59:11,674 27426 INFO ? odoo.tools.misc:Thread: <Thread(odoo.service.http.request.140616848307968, started 140616848307968)> (db:) (uid:n/a) (url:http://8.8.8.8:8069/web/database/backup)File: "/usr/lib/python3.6/threading.py", line 884, in _bootstrap 
 self._bootstrap_inner()
 File: "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
 self.run()
 File: "/usr/lib/python3.6/threading.py", line 864, in run
 self._target(*self._args, **self._kwargs)
 File: "/usr/lib/python3.6/socketserver.py", line 654, in process_request_thread
 self.finish_request(request, client_address)
 File: "/usr/lib/python3.6/socketserver.py", line 364, in finish_request
 self.RequestHandlerClass(request, client_address, self)
 File: "/usr/lib/python3.6/socketserver.py", line 724, in init
 self.handle()
 File: "/opt/odoo14/odoo14-venv/lib/python3.6/site-packages/werkzeug/serving.py", line 329, in handle
 rv = BaseHTTPRequestHandler.handle(self)
 File: "/usr/lib/python3.6/http/server.py", line 418, in handle
 self.handle_one_request()
 File: "/opt/odoo14/odoo14-venv/lib/python3.6/site-packages/werkzeug/serving.py", line 364, in handle_one_request
 return self.run_wsgi()
 File: "/opt/odoo14/odoo14-venv/lib/python3.6/site-packages/werkzeug/serving.py", line 306, in run_wsgi
 execute(self.server.app)
 File: "/opt/odoo14/odoo14-venv/lib/python3.6/site-packages/werkzeug/serving.py", line 297, in execute
 write(data)
 File: "/opt/odoo14/odoo14-venv/lib/python3.6/site-packages/werkzeug/serving.py", line 278, in write
 self.wfile.write(data)
 File: "/usr/lib/python3.6/socketserver.py", line 803, in write
 self._sock.sendall(b)
 2021-04-15 12:59:11,675 27426 INFO ? odoo.service.server: Initiating server reload
 2021-04-15 12:59:12,092 27426 DEBUG ? odoo.service.server: current thread: <_MainThread(MainThread, started 140617347565376)>
 2021-04-15 12:59:12,093 27426 DEBUG ? odoo.service.server: process <_MainThread(MainThread, started 140617347565376)> (False)
 2021-04-15 12:59:12,093 27426 DEBUG ? odoo.service.server: process <Thread(odoo.service.cron.cron0, started daemon 140617081812736)> (True)
 2021-04-15 12:59:12,093 27426 DEBUG ? odoo.service.server: process <Thread(odoo.service.cron.cron1, started daemon 140617073420032)> (True)
 2021-04-15 12:59:12,093 27426 DEBUG ? odoo.service.server: process <Thread(odoo.addons.bus.models.bus.Bus, started daemon 140616909182720)> (True)
 2021-04-15 12:59:12,093 27426 DEBUG ? odoo.service.server: process <Thread(odoo.service.http.request.140616848307968, started 140616848307968)> (False)
 2021-04-15 12:59:12,093 27426 DEBUG ? odoo.service.server: process <Thread(openerp.longpolling.request.140616881878784, started daemon 140616881878784)> (True)
 2021-04-15 12:59:12,093 27426 DEBUG ? odoo.service.server: --
 分析:这台服务器的操作系统是Ubuntu18.04,按说Odoo18.04是直接安装不了Odoo14的deb包的,猜测这台服务器应该是采用了特殊的安装方法,查看Odoo服务,果然发现使用了Python虚拟环境。猜测这次莫名其妙的问题应该和这个虚拟python环境相关。
 因为我以前在Ubuntu18.04测试过Odoo14的源码运行,所以只要手动安装好Odoo14的依赖,Odoo14是可以在Ubuntu1804上运行的。
 解决办法:
 因为客户是生产环境,包含重要数据,所以小心翼翼的做好了数据库备份、附件备份,当前配置的各种备份。然后直接安装Odoo14的Python依赖,不再使用Python虚拟环境。
 Odoo学习QQ群号:374626483
 效果:
 Odoo崩溃现象消失,客户反馈说Odoo响应速度还提升了不少。
 总结:
 建议直接使用官方Odoo14的deb包安装,使用野路子安装很可能带来莫名其妙的问题。
- 
感觉你既没有分析出问题的实际原因也不明白什么是Python的虚拟环境,最后的结论也不完全正确。 就你目前贴的log看: thread <Thread(odoo.service.http.request.140616848307968, started 140616848307968)> virtual real time limit (137/120s) reached. 这里看到有线程运行超时被系统终止 Thread: <Thread(odoo.service.http.request.140616848307968, started 140616848307968)> (db:) (uid:n/a) (url:http://8.8.8.8:8069/web/database/backup) 这里看到应该是在做数据库备份。 所以猜测问题的可能原因是安装了第三方自动数据库备份模块,可能跟数据库备份的异常终止有关。 Python的虚拟环境是用来隔离系统Python或其他Python环境的函数库环境的,是为了保证函数库版本不冲突的。 没有 “莫名其妙” 的问题,只有不理解的问题。 
- 
@digitalsatori 是的,当时我也以为是数据库备份的问题,后来我问了客户,客户没有安装自动备份模块,而且手动备份后的数据库也很小,才几Mb。后来就没在数据库备份上找问题。我把日志level改为debug,也还是提示这个,其它日志都正常,但确实客户没有备份。后来百度了很久,有帖子说可能和虚拟python环境有关,才取消了python虚拟环境,Odoo服务就正常了。 
- 
FOR THE RECORD 
 --limit-time-real=0
 https://github.com/odoo/odoo/issues/28808

