2017-07-05 55 views
0

我使用celeryrabbitmq,但最近我得到這個錯誤sock.setsockopt(SOL_TCP, opt, val), [Errno 22] Invalid argument
細節,芹菜工人加薪襪子setsockopt的TCP_SYNCNT [錯誤22]無效參數

{1: 1, 2: 16396, 3: 0, 4: 60, 5: 10, 6: 9, 7: 0, 8: 30, 9: 0, 10: 81059, 12: 1} 
(6, 1, 1) 
(6, 2, 16396) 
(6, 3, 0) 
(6, 4, 60) 
(6, 5, 10) 
(6, 6, 9) 
(6, 7, 0) 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/celery/app/task.py", line 535, in apply_async 
    **options 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/celery/app/base.py", line 737, in send_task 
    amqp.send_task_message(P, name, message, **options) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/celery/app/amqp.py", line 558, in send_task_message 
    **properties 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/messaging.py", line 181, in publish 
    exchange_name, declare, 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 527, in _ensured 
    errback and errback(exc, 0) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/contextlib.py", line 35, in __exit__ 
    self.gen.throw(type, value, traceback) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 419, in _reraise_as_library_errors 
    sys.exc_info()[2]) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 414, in _reraise_as_library_errors 
    yield 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 515, in _ensured 
    reraise_as_library_errors=False, 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 405, in ensure_connection 
    callback) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/utils/functional.py", line 333, in retry_over_time 
    return fun(*args, **kwargs) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 261, in connect 
    return self.connection 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 802, in connection 
    self._connection = self._establish_connection() 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/connection.py", line 757, in _establish_connection 
    conn = self.transport.establish_connection() 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 130, in establish_connection 
    conn.connect() 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/amqp/connection.py", line 294, in connect 
    self.transport.connect() 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/amqp/transport.py", line 122, in connect 
    self.socket_settings, self.read_timeout, self.write_timeout, 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/amqp/transport.py", line 174, in _init_socket 
    self._set_socket_options(socket_settings) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/site-packages/amqp/transport.py", line 205, in _set_socket_options 
    self.sock.setsockopt(SOL_TCP, opt, val) 
    File "/app/pyenv/versions/2.7.11/lib/python2.7/socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
kombu.exceptions.OperationalError: [Errno 22] Invalid argument 

(6, 7, 0)print(SOL_TCP, opt, val)其輸出我加在_set_socket_options

之後提到_socket.pi,我得到這個:

  • 6SOL_TCP = 6
  • 7TCP_SYNCNT = 7(我想...)
  • 0,VAL

,所有我知道的,我認爲它會與系統設置的東西,它與其他系統使用相同的代碼和包裝很好地工作。但我對TCP_SYNCNT知之甚少,任何幫助表示讚賞!

BTW,這裏是我的環境

  • 芹菜4.0.2(latentcall)
  • 的RabbitMQ服務器-3.6.6-1.el6.noarch
  • 二郎-19.1.6-1。 el6.x86_64
  • CentOS版本6.4(最終)
  • python2.7.11與pyenv

PIP冷凍

amqp==2.1.4 
billiard==3.5.0.2 
celery==4.0.2 
chardet==3.0.4 
Django==1.10.3 
django-redis==4.8.0 
djangorestframework==3.6.3 
httplib2==0.10.3 
kombu==4.0.2 
netifaces==0.10.6 
psutil==5.2.2 
py==1.4.34 
pyasn1==0.2.3 
pyftpdlib==1.5.2 
pyrabbit==1.1.0 
pytest==3.0.6 
pytz==2017.2 
redis==2.10.5 
rsa==3.4.2 
six==1.10.0 
vine==1.1.3 
xlrd==1.0.0 

回答

0

通過一套net.ipv4.tcp_syn_retries = 1解決,有人將其設置爲0這可能意味着永遠ESTABLISHED之前發送syn