#31373: Django 3.x / uwsgi is leaking connections
-------------------------------+--------------------------------------
Reporter: Marcin Nowak | Owner: nobody
Type: Uncategorized | Status: closed
Component: Uncategorized | Version: 3.0
Severity: Normal | Resolution: needsinfo
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Comment (by Marcin Nowak):
{{{
createdb connmaxage
python -m venv /tmp/env
. /tmp/env/bin/activate
pip install django==3.0.4
pip install psycopg2-binary
cd /tmp/
unzip connmaxage.zip
cd connmaxage
./manage.py runserver
}}}
then (on the 2nd terminal)
{{{
ab -c 10 -n 1000 http://127.0.0.1:8000/
}}}
Result:
{{{
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 200 1
Internal Server Error: /
Traceback (most recent call last):
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/tmp/env/lib/python3.8/site-packages/django/utils/asyncio.py",
line 26, in inner
return func(*args, **kwargs)
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/base/base.py", line 197, in connect
self.connection = self.get_new_connection(conn_params)
File "/tmp/env/lib/python3.8/site-packages/django/utils/asyncio.py",
line 26, in inner
return func(*args, **kwargs)
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/postgresql/base.py", line 185, in
get_new_connection
connection = Database.connect(**conn_params)
File "/tmp/env/lib/python3.8/site-packages/psycopg2/__init__.py", line
126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: sorry, too many clients already
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/tmp/env/lib/python3.8/site-
packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/tmp/env/lib/python3.8/site-
packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/tmp/env/lib/python3.8/site-
packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
File "/tmp/connmaxage/connmaxage/main/views.py", line 7, in main
return HttpResponse(str(User.objects.count()))
File "/tmp/env/lib/python3.8/site-packages/django/db/models/manager.py",
line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/tmp/env/lib/python3.8/site-packages/django/db/models/query.py",
line 397, in count
return self.query.get_count(using=self.db)
File "/tmp/env/lib/python3.8/site-
packages/django/db/models/sql/query.py", line 517, in get_count
number = obj.get_aggregation(using, ['__count'])['__count']
File "/tmp/env/lib/python3.8/site-
packages/django/db/models/sql/query.py", line 502, in get_aggregation
result = compiler.execute_sql(SINGLE)
File "/tmp/env/lib/python3.8/site-
packages/django/db/models/sql/compiler.py", line 1149, in execute_sql
cursor = self.connection.cursor()
File "/tmp/env/lib/python3.8/site-packages/django/utils/asyncio.py",
line 26, in inner
return func(*args, **kwargs)
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/base/base.py", line 260, in cursor
return self._cursor()
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/base/base.py", line 236, in _cursor
self.ensure_connection()
File "/tmp/env/lib/python3.8/site-packages/django/utils/asyncio.py",
line 26, in inner
return func(*args, **kwargs)
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/tmp/env/lib/python3.8/site-packages/django/db/utils.py", line 90,
in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/tmp/env/lib/python3.8/site-packages/django/utils/asyncio.py",
line 26, in inner
return func(*args, **kwargs)
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/base/base.py", line 197, in connect
self.connection = self.get_new_connection(conn_params)
File "/tmp/env/lib/python3.8/site-packages/django/utils/asyncio.py",
line 26, in inner
return func(*args, **kwargs)
File "/tmp/env/lib/python3.8/site-
packages/django/db/backends/postgresql/base.py", line 185, in
get_new_connection
connection = Database.connect(**conn_params)
File "/tmp/env/lib/python3.8/site-packages/psycopg2/__init__.py", line
126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: FATAL: sorry, too many clients already
[17/Mar/2020 23:20:23] "GET / HTTP/1.0" 500 166202
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/31373#comment:12>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/065.9a1fc2fb87f06ab891b2a0eb368f122c%40djangoproject.com.