在 Ubuntu 上使用 Python 的 Azure WebApp 中的连接泄漏

Connection Leak in Azure WebApp Using Python on Ubuntu

我在 Azure 上的 Ubuntu WebApp 上有一个 Flask 应用 运行ning。每天早上我对应用程序的查询都会失败,并出现以下错误:

sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('08S01', '[08S01] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x68 (104) (SQLExecDirectW)')

我正在使用 SQLAlchemy ORM 查询我的 Azure SQL 服务器实例。我认为我的联系因以下原因而变得陈旧。

  1. 每天早上在没有人使用该应用程序后都会发生这种情况
  2. 在 X 次失败后 returns,它开始工作,直到第二天早上。

然而,让事情变得更奇怪的是,当我在 sql 服务器上检查 sys.dm_exec_sessions 时,它没有显示任何活动连接(在我正在执行检查的连接之外)。

此外,当我 运行 在我本地的 dockerized 应用程序连接到数据库时,我没有收到这样的错误。

如果有人遇到过类似的问题,我希望能提供一些见解,或者至少提供有关深入研究的建议。

https://azure.github.io/AppService/2018/03/01/Deep-Dive-into-TCP-Connections-in-App-Service-Diagnostics.html

这 link 帮助了我,但解决方案仅适用于 Windows 应用程序,不适用于 Linux。

在@snakecharmerb 的帮助下:

应用程序 in-fact 一直在死连接池中,设置 pool_recycle 更长的时间解决了这个问题。

engine = create_engine(
        key, echo=False, future=True,
        echo_pool=True,
        #  connection pool will log informational output such as when connections are invalidated.
        pool_recycle=3600
        #  causes the pool to recycle connections after the given number of seconds has passed.
    )