一个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