1.psycopg2.OperationalError:FATAL:remaining connection slots are reserved for non-replication superuser connections
The above exception was the direct cause of the following exception:
Traceback(most recent call last):
File "home/XXX/anaconda3/envs/airflow/lib/python3.6/site-packages/sqlachemy/engine/default.py",line 493,in connect
return self.dbapi.connect(*cargs,**cparams)
File "/home/XXX/anaconda3/envs/airflow/lib/python3.6/site-packages/psycopg2/__init__.py",line 127, in connect
conn = _connect(dsn,connection_factory=connection_factory,**kwasync)
sqlalchemy.exc.OperationalError:(psycopg2.OperationalError) FATAL: remaining connection slots are reserved for non-replication superuser connections
(Background on this error at:http://sqlalche.me/e/13/e3q8)
当时几天频繁报该错,一开始说的是example_subdag_operator无法import,后来把这个dag置灰了,但是后来又有报错,加之分析报错内容,应该是连接backend的postgresql出了问题(因为sqlachemy本身更新引起的可能性很小,况且环境中用的sqlachemy版本本身就不是最新版)。后来登录上postgresql,发现了端倪:
我的postgresql最大连接数才100,airflow用了94个,然而idle是空闲的意思,推测应该是没有释放连接,导致没有剩余连接可用(后来知道是僵尸task)。
解决:
1.首先修改postgresql最大连接数:
show max_connections; -- 查看
alter system set max_connections= 数量; -- 修改
然后重启postgresql服务生效参数。
(其实这一步完了之后,airflow就已经恢复了正常,因为可以获得连接了)
select usename, count(*) from pg_stat_activity group by usename order by count(*) desc;
但还是要根除一下
2.修改airflow.cfg的最大僵尸task数量
原来的参数:
也太大了......
改为:12
解决!