Сельдерей: время ожидания socket.error истекло

Я использую:

celery==3.1.12
kombu==3.0.19
amqp==1.4.5

Рабочий сельдерея был запущен:

celery worker --without-gossip --without-heartbeat --without-mingle

Сельдерей настройки:

CELERY_ALWAYS_EAGER = False
CELERY_EAGER_PROPAGATES_EXCEPTIONS = True
BROKER_URL = 'amqp://guest:[email protected]:5672//'
BROKER_CONNECTION_TIMEOUT = 30
CELERY_RESULT_BACKEND = "amqp"
CELERY_TASK_RESULT_EXPIRES = 18000  # 5 hours.
CELERY_RESULT_PERSISTENT = True

Иногда я получаю эту ошибку:

Traceback (most recent call last):

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 112, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/newrelic-2.18.1.15/newrelic/hooks/framework_django.py", line 492, in wrapper
    return wrapped(*args, **kwargs)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/django_restapi/resource.py", line 143, in __call__
    return self.dispatch(request, self, *args, **kwargs)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/django_restapi/resource.py", line 76, in dispatch
    return target.create(request, *args, **kwargs)

  File "./kavyarnya/api/post_deploy.py", line 110, in create
    process_commit.delay(project.id, commit, post_deploy_call.id)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/celery/app/task.py", line 358, in delay
    return self.apply_async(args, kwargs)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/celery/app/task.py", line 474, in apply_async
    **options)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/celery/app/amqp.py", line 249, in publish_task
    **kwargs

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/messaging.py", line 164, in publish
    routing_key, mandatory, immediate, exchange, declare)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/connection.py", line 470, in _ensured
    interval_max)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/connection.py", line 396, in ensure_connection
    interval_start, interval_step, interval_max, callback)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/utils/__init__.py", line 217, in retry_over_time
    return fun(*args, **kwargs)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/connection.py", line 246, in connect
    return self.connection

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/connection.py", line 761, in connection
    self._connection = self._establish_connection()

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/connection.py", line 720, in _establish_connection
    conn = self.transport.establish_connection()

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 115, in establish_connection
    conn = self.Connection(**opts)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/amqp/connection.py", line 136, in __init__
    self.transport = create_transport(host, connect_timeout, ssl)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/amqp/transport.py", line 264, in create_transport
    return TCPTransport(host, connect_timeout)

  File "/usr/local/lib/staging/kava/.envf322d0e225b48a1bb90126f74d73812df3b92994/local/lib/python2.7/site-packages/amqp/transport.py", line 99, in __init__
    raise socket.error(last_err)

error: timed out

RabbitMq имеет настройки по умолчанию. https://www.rabbitmq.com/configure.html

/etc/default/rabbitmq-server : `ulimit -n 16384`

Журнал кролика:

=WARNING REPORT==== 19-Mar-2016::00:02:17 ===
closing AMQP connection <0.30881.4> (127.0.0.1:26762 -> 127.0.0.1:5672):
connection_closed_abruptly

Максимальное количество розеток:

# sysctl -a | grep somax 
net.core.somaxconn = 32768

Я попытался решить эту проблему следующими способами:

  1. Установите BROKER_HEARTBEAT = 10 - у меня еще хуже
  2. Установите BROKER_POOL_LIMIT = None — ничего не изменилось по сравнению с текущим состоянием
  3. Установите для BOKER_CONNECTION_TIMEOUT значение 10, 20, 30 — большее значение тайм-аута приводит к меньшему количеству ошибок.

Я предполагаю, что увеличение значений тайм-аута просто скрывает реальную проблему. В чем причина этой проблемы и как ее решить? Спасибо


person Begun-A    schedule 24.03.2016    source источник
comment
Столкнулся с аналогичной проблемой при использовании опции --without-heartbeat. Пожалуйста, проверьте мой ответ на Stackoverflow здесь   -  person famagusta    schedule 23.02.2021


Ответы (1)


Какова частота запросов, которые вы пытаетесь обработать?

Можете ли вы поделиться тем, что происходит с использованием ЦП, потреблением памяти, статистикой дискового ввода-вывода на машине, на которой работает RabbitMQ, во время тайм-аутов?

Похоже, Rabbit не может достаточно быстро обрабатывать соединения.

В качестве слепого предположения я предлагаю увеличить размер пула потоков ввода-вывода Erlang VM (см. раздел «Пул потоков ввода-вывода Erlang VM» здесь https://www.rabbitmq.com/networking.html)

И, возможно, немного поиграйте с «Журналом подключений» кролика (см. ту же ссылку).

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

person Igor Bondarenko    schedule 25.03.2016