Django 不重用 CONN_MAX_AGE=60 的 MySQL 连接

Ben*_*gal 6 python mysql django

我在开发中使用 Django 1.9.2 ( DEBUG=True) 和 MySQL 5.6.23。以下是我的数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': "django",
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',
        'CONN_MAX_AGE': 60,
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令查询 MySQL 以获取活动连接数:

show status where `variable_name` = 'Threads_connected';
Run Code Online (Sandbox Code Playgroud)

它产生这样的结果

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 10    |
+-------------------+-------+
1 row in set (0,00 sec)
Run Code Online (Sandbox Code Playgroud)

每次我向 Django 发出新请求时,连接的线程数都会增加,直到我(1040, 'Too many connections')得到Threads_connected=151. 此外,60 秒后连接不会关闭。

这种行为在生产中似乎不会发生(DEBUG=False)。

sox*_*sox 7

您正在开发模式下运行 Django,因此CONN_MAX_AGE无效,因为每个请求都由不同的线程提供服务。\n来自文档

\n
\n

开发服务器为其处理的每个请求创建一个新线程,从而消除持久连接的影响。不要在开发过程中启用它们

\n
\n

关于60秒后未关闭连接:在启动下一个请求时会检查并关闭超时连接,因此只要在超过60秒后向django发出新请求,它应该检测到过时的连接并将其关闭。

\n