Celery stürzt ab, wenn PgBouncer inaktive Verbindungen schließt (Leerlauf-Timeouts aktiviert)Python

Python-Programme
Anonymous
 Celery stürzt ab, wenn PgBouncer inaktive Verbindungen schließt (Leerlauf-Timeouts aktiviert)

Post by Anonymous »

Ich stoße auf ein Problem, wenn ich Celery mit PgBouncer und PostgreSQL ausführe, nachdem ich Zeitüberschreitungen bei Leerlaufverbindungen aktiviert habe.
Mein Stack umfasst:
  • Django (bereitgestellt über Tornado)
  • Celery (Arbeiter + Beat)
  • PostgreSQL
  • PgBouncer (vor PostgreSQL)
Aufgrund einer großen Anzahl inaktiver Datenbankverbindungen, die durch Tornado + Django verursacht wurden, habe ich Leerlauf-Timeout-Einstellungen eingeführt, um PostgreSQL davor zu schützen, dass ihm die Verbindungen ausgehen.
PgBouncer

Code: Select all

idle_transaction_timeout=240 (4mins)
client_idle_timeout=240
PostgreSQL

Code: Select all

idle_in_transaction_session_timeout=300000 (5mins)
idle_session_timeout=300000 (5mins)
Problem:
Nach dem Anwenden dieser Einstellungen stürzt Celery gelegentlich mit der folgenden Fehlermeldung ab:

Code: Select all

[2025-12-16 06:12:01,578: ERROR/MainProcess] Unrecoverable error: DatabaseError('client_idle_timeout\nserver closed the connection unexpectedly\n\tThis probably means the server terminated abnormally\n\tbefore or while processing the request.\n',)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/celery/worker/__init__.py", line 351, in start
component.start()
File "/usr/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 393, in start
self.consume_messages()
File "/usr/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 885, in consume_messages
self.connection.drain_events(timeout=10.0)
File "/usr/local/lib/python2.7/site-packages/kombu/connection.py", line 276, in drain_events
return self.transport.drain_events(self.connection, **kwargs)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 760, in drain_events
item, channel = get(timeout=timeout)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/scheduling.py", line 39, in get
return self.fun(resource, **kwargs), resource
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 780, in _drain_channel
return channel.drain_events(timeout=timeout)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 578, in drain_events
return self._poll(self.cycle, timeout=timeout)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 287, in _poll
return cycle.get()
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/scheduling.py", line 39, in get
return self.fun(resource, **kwargs), resource
File "/usr/local/lib/python2.7/site-packages/djkombu/transport.py", line 31, in _get
m = Queue.objects.fetch(queue)
File "/usr/local/lib/python2.7/site-packages/djkombu/managers.py", line 18, in fetch
queue = self.get(name=queue_name)
File "/usr/local/lib/python2.7/site-packages/django/db/models/manager.py", line 132, in get
return self.get_query_set().get(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 344, in get
num = len(clone)
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 82, in __len__
self._result_cache = list(self.iterator())
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 273, in iterator
for row in compiler.results_iter():
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
for rows in self.execute_sql(MULTI):
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
return self.cursor.execute(query, args)
DatabaseError: client_idle_timeout
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

[2025-12-16 06:12:02,291: INFO/MainProcess] Celerybeat:  Shutting down...
Fragen:
  • Ist dies ein bekanntes Problem bei der Verwendung von Celery mit PgBouncer-Leerlauf-Timeouts?
  • Sind diese Timeout-Werte mit lang laufenden Celery-Workern nicht kompatibel?
  • Was ist die empfohlene Methode zur Konfiguration von PgBouncer/PostgreSQL-Leerlauf? Timeouts, wenn Sellerie involviert ist?
Für Hinweise oder Best Practices wäre ich sehr dankbar. Vielen Dank im Voraus!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post