【问题标题】:Odoo: psycopg2.OperationalError: FATAL: too many connections for role "p_my_oerp_master_11234451"Odoo: psycopg2.OperationalError: FATAL: too many connections for role \"p_my_oerp_master_11234451\"
【发布时间】:2022-10-05 13:10:56
【问题描述】:

从今天(9 月 30 日)开始,在 Odoo.sh 上使用 Odoo v13,在以“ADMIN”或其他 odoo 用户身份登录我的 odoo 帐户后,我每分钟都会收到此错误,并且所有“Odoo 内部用户”都与他们的会话断开连接每隔几分钟:

psycopg2.OperationalError: FATAL:  too many connections for role "p_my_oerp_master_1123445"

追溯:

2022-09-30 17:01:32,442 30903 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf
2022-09-30 17:01:32,657 30903 INFO ? odoo.service.server: HTTP service (werkzeug) running through socket activation
2022-09-30 17:01:32,666 30903 INFO ? odoo.sql_db: Connection to the database failed
2022-09-30 17:01:32,667 30903 CRITICAL ? odoo.service.server: Failed to initialize database `my-oerp-master-1123445`. 
Traceback (most recent call last):
  File "/home/odoo/src/odoo/odoo/service/server.py", line 1194, in preload_registries
    registry = Registry.new(dbname, update_module=update_module)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 75, in new
    registry.init(db_name)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 144, in init
    with closing(self.cursor()) as cr:
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 563, in cursor
    return self._db.cursor()
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 669, in cursor
    return Cursor(self.__pool, self.dbname, self.dsn, serialized=serialized)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 196, in __init__
    self._cnx = pool.borrow(dsn)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 552, in _locked
    return fun(self, *args, **kwargs)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 620, in borrow
    **connection_info)
  File "/usr/local/lib/python3.6/dist-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL:  too many connections for role "p_my_oerp_master_1123445"
2022-09-30 17:01:32,727 30903 INFO ? odoo.http: HTTP Configuring static files
2022-09-30 17:01:32,736 30903 INFO my-oerp-master-1123445 odoo.sql_db: Connection to the database failed
2022-09-30 17:01:32,737 30903 INFO my-oerp-master-1123445 odoo.http: Generating nondb routing
2022-09-30 17:01:32,755 30903 INFO None odoo.sql_db: Connection to the database failed
2022-09-30 17:01:32,755 30903 WARNING my-oerp-master-1123445 odoo.service.model: method ir.cron.acquire_job failed during rpc call: FATAL:  too many connections for role "p_my_oerp_master_1123445"
2022-09-30 17:01:32,755 30903 ERROR my-oerp-master-1123445 odoo.http: FATAL:  too many connections for role "p_my_oerp_master_1123445"
 
Traceback (most recent call last):
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 61, in __new__
    return cls.registries[db_name]
  File "/home/odoo/src/odoo/odoo/tools/func.py", line 69, in wrapper
    return func(self, *args, **kwargs)
  File "/home/odoo/src/odoo/odoo/tools/lru.py", line 44, in __getitem__
    a = self.d[obj].me
KeyError: 'my-oerp-master-1123445'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/odoo/src/odoo/odoo/http.py", line 1479, in dispatch
    odoo.registry(db).check_signaling()
  File "/home/odoo/src/odoo/odoo/__init__.py", line 104, in registry
    return modules.registry.Registry(database_name)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 63, in __new__
    return cls.new(db_name)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 75, in new
    registry.init(db_name)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 144, in init
    with closing(self.cursor()) as cr:
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 563, in cursor
    return self._db.cursor()
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 669, in cursor
    return Cursor(self.__pool, self.dbname, self.dsn, serialized=serialized)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 196, in __init__
    self._cnx = pool.borrow(dsn)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 552, in _locked
    return fun(self, *args, **kwargs)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 620, in borrow
    **connection_info)
  File "/usr/local/lib/python3.6/dist-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL:  too many connections for role "p_my_oerp_master_1123445"


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 61, in __new__
    return cls.registries[db_name]
  File "/home/odoo/src/odoo/odoo/tools/func.py", line 69, in wrapper
    return func(self, *args, **kwargs)
  File "/home/odoo/src/odoo/odoo/tools/lru.py", line 44, in __getitem__
    a = self.d[obj].me
KeyError: 'my-oerp-master-1123445'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/odoo/src/odoo/odoo/http.py", line 139, in dispatch_rpc
    result = dispatch(method, params)
  File "/usr/local/bin/odoo-rpc", line 26, in dispatch
    return odoo_dispatch(method, [db, odoo.SUPERUSER_ID, None] + list(params))
  File "/home/odoo/src/odoo/odoo/service/model.py", line 38, in dispatch
    registry = odoo.registry(db).check_signaling()
  File "/home/odoo/src/odoo/odoo/__init__.py", line 104, in registry
    return modules.registry.Registry(database_name)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 63, in __new__
    return cls.new(db_name)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 75, in new
    registry.init(db_name)
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 144, in init
    with closing(self.cursor()) as cr:
  File "/home/odoo/src/odoo/odoo/modules/registry.py", line 563, in cursor
    return self._db.cursor()
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 669, in cursor
    return Cursor(self.__pool, self.dbname, self.dsn, serialized=serialized)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 196, in __init__
    self._cnx = pool.borrow(dsn)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 552, in _locked
    return fun(self, *args, **kwargs)
  File "/home/odoo/src/odoo/odoo/sql_db.py", line 620, in borrow
    **connection_info)
  File "/usr/local/lib/python3.6/dist-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL:  too many connections for role "p_my_oerp_master_1123445"

【问题讨论】:

  • 您必须在应用程序中调试连接泄漏。
  • 谢谢...但是连接泄漏到底是什么意思? (连接循环?)如何追踪它的起源?
  • 您的第一站不应该是您的 PaaS 提供商吗?

标签: python postgresql database-connection psycopg2 odoo-13


【解决方案1】:

根据您提交的错误,它似乎是在后台不断运行的 SQL 命令,并且随着更多用户登录,数据库崩溃。这可能是由于第三方模块或自定义代码(通过工作室创建)造成的。

当您在 PaaS 中时,您可以使用 webshell 中的 pg_activity 检查正在运行的查询,并使用以下查询终止阻塞查询或检查 psql 中指定用户的连接:

SELECT *
FROM   pg_stat_activity
WHERE  usename = 'p_my_oerp_master_1123445';

然后通过使用pg_cancel_backend(pid) 终止阻塞查询来取消用户连接

确保不要犯错误,否则您可能会终止一些重要的查询。

【讨论】:

  • @sylvain haha​​ 在您自定义配置文件时仍然有效!
  • @sylvain db_maxconn = 2 未在默认配置中设置
  • 在 Odoo.sh>Shell 中安装 pg_activity 后出现此错误:ModuleNotFoundError: No module named 'pgactivity.Data'..... 似乎 odoo.sh v13 不允许这样做:odoo.com/fr_FR/forum/aide-1/…
  • @sylvain 在 ubuntu 18.04 上,pg_activity 使用 python2,该用法已从 Odoo SH 中删除。解决方案是使用 20.04 获取对 pg_activity 的访问权限
  • @sylvain render (website/models/ir_ui_view.py:347
【解决方案2】:

我的问题似乎是由挂起的过程引起的。 在 Odoo.sh > 监控选项卡... “性能分析”工具可以启动 Odoo 工作人员的分析会话。对于每个会话,都会为您生成一个交互式火焰图,以可视化您的 Odoo 工作人员正在花时间做什么。

生成的火焰图如下: 有谁知道如何处理这样的结果?

以及 ps -ax 终端命令的输出:

my_oerp_master_11234451 [生产/v13.0]:~$ ps -ax PID TTY 状态时间命令 1 ? Ss 2:29 ODOO.SH:[my_oerp_master_11234451 / 生产 / 13.0]

106 ? SNsl 0:56 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

4807 ? Ssl 8:44 python3 /home/odoo/src/odoo/odoo-bin --database=my_oerp_master_11234451 --logfile=/home/odoo/logs/odoo.log

5899 ?注册护士 0:01 /opt/odoo.sh/jupyterlab/bin/python3 /opt/odoo.sh/jupyterlab/bin/odoo-webshel​​l --ip=0.0.0.0 --port=8889 -

5903 点/0 SN 0:00 /bin/bash -l

8730 ? SNsl 0:53 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

10738 ? SNsl 0:56 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

11263 ? SNsl 0:56 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

11334 点/3 个 SN+ 0:00 /bin/bash 12134 ? SNsl 0:56 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

12864 ? SNsl 0:56 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

13384 ? SNsl 0:49 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

13584 分/0 RN+ 0:00 ps -ax

16281 ? SNsl 0:48 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

17130 ? SNsl 0:51 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

17882 ? SNsl 0:51 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

20516 ? SNsl 0:09 /opt/odoo.sh/jupyterlab/bin/python3 /opt/odoo.sh/jupyterlab/bin/jupyter-lab --debug --ip=0.0.0.0 --port=8888

29069 点/1 个 SN 0:00 /bin/bash

29079 分/1 SN+ 0:02 少 +F /home/odoo/logs/odoo.log

29094 点/2 个 SN+ 0:00 /bin/bash

30181 ? SNsl 0:56 python3 /usr/local/bin/odoo-rpc --database=my_oerp_master_11234451

my_oerp_master_11234451 [生产/v13.0]:~$

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 2014-10-14
    • 2022-11-10
    • 2013-03-26
    • 2015-06-09
    • 1970-01-01
    • 2019-11-27
    • 2011-07-15
    • 2014-07-26
    相关资源
    最近更新 更多