我正在运行PostgreSQL 9.3和SQLAlchemy 0.8.2,并且遇到数据库连接泄漏。部署应用程序后消耗约240个连接。在接下来的30个小时内,这个数字会逐渐增加到500,当PostgreSQL将开始丢弃连接。泄漏数据库连接:PostgreSQL,SQLAlchemy,Flask
我使用SQLAlchemy thread-local sessions:
from sqlalchemy import orm, create_engine
engine = create_engine(os.environ['DATABASE_URL'], echo=False)
Session = orm.scoped_session(orm.sessionmaker(engine))
对于瓶Web应用程序中,.remove()
调用Session
代理对象是要求拆卸期间发送:
@app.teardown_request
def teardown_request(exception=None):
if not app.testing:
Session.remove()
这应该是一样的Flask-SQLAlchemy
正在做什么。
我也有,在一个循环中运行一些周期性的任务,我呼吁.remove()
为循环的每一次迭代:
def run_forever():
while True:
do_stuff(Session)
Session.remove()
我在做什么错误可能导致泄漏的连接?
是否有你用flask-sqlalchemy标记过的原因,但没有使用flask-sqlalchemy来管理你的会话? – davidism 2014-09-04 15:07:36
这也是一种非常糟糕的方式来运行后台任务。考虑使用芹菜,在Flask文档中有一种将应用上下文和数据库会话导入任务的模式。 – davidism 2014-09-04 15:08:58
应用程序是如何部署的? – 2014-09-07 15:15:21