Иногда сервер неожиданно закрывал соединение - PullRequest
0 голосов
/ 26 сентября 2019

История проекта:

  1. Проект Django, я использую gunicorn для запуска проекта, в проекте я использую python socket io для обработки какого-либо события
  2. Postgresql, например, config:
DATABASES['default'] = {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': xxx,
    'USER': xxx,
    'PASSWORD': xxx,
    'HOST': 'xxx',
    'PORT': '5432',
    'CONN_MAX_AGE': 60 * 10,  # seconds
    'OPTIONS': {
        'connect_timeout': 20,
    },
}

сокет python io будет поддерживать поток для обработки некоторых событий.поэтому у потока есть собственное соединение с базой данных postgresql.иногда я нахожу, что это вызовет проблему с подключением к базе данных, например, я не знаю, почему подключение к базе данных обычно не закрывается

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/engineio/server.py", line 520, in _trigger_event
    return self.handlers[event](*args)
  File "/usr/local/lib/python2.7/site-packages/socketio/server.py", line 590, in _handle_eio_message
    self._handle_event(sid, pkt.namespace, pkt.id, pkt.data)
  File "/usr/local/lib/python2.7/site-packages/socketio/server.py", line 526, in _handle_event
    self._handle_event_internal(self, sid, data, namespace, id)
  File "/usr/local/lib/python2.7/site-packages/socketio/server.py", line 529, in _handle_event_internal
    r = server._trigger_event(data[0], namespace, sid, *data[1:])
  File "/usr/local/lib/python2.7/site-packages/socketio/server.py", line 558, in _trigger_event
    return self.handlers[namespace][event](*args)
  File "/usr/src/app/async_worker/controllers/server/event_handler.py", line 61, in on_jira_handle_from_client_retrieve
    ticket = Ticket.get_ticket_by_id(ticket_id)
  File "/usr/src/app/review/models/ticket.py", line 144, in get_ticket_by_id
    return Ticket.objects.filter(id=ticket_id).first()
  File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 564, in first
    objects = list((self if self.ordered else self.order_by('pk'))[:1])
  File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 250, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 1118, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
  File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 899, in execute_sql
    raise original_exception
OperationalError: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

Вот что я получаю в файле журнала PostgreSQL:

LOG: could not receive data from client: Connection reset by peer

некоторые идеи по поводу проблемы?Я думаю, что если соединение держится слишком долго (> CONN_MAX_AGE), коннект должен быть закрыт и установлен на None, но на самом деле соединение не нулевое, а уже закрытое

1 Ответ

0 голосов
/ 26 сентября 2019

Сообщение об ошибке, которое вы видите, пришло из клиентской библиотеки PostgreSQL.

Теперь и сервер, и клиент PostgreSQL жалуются, что другая сторона внезапно ушла, так что это почти наверняка проблема с работой.

Мои деньги лежат на плохо настроенном брандмауэре, который через некоторое время прерывает бездействующие соединенияМне всегда было интересно, есть ли любой действительный вариант использования брандмауэра для этого ...

...