<p>μ…€λŸ¬λ¦¬ μƒμŠΉ 였λ₯˜ : [Errno 104] μ‹œμž‘ ν›„ ν”Όμ–΄μ—μ„œ μ—°κ²° μž¬μ„€μ •</p>

에 λ§Œλ“  2018λ…„ 06μ›” 29일  Β·  57μ½”λ©˜νŠΈ  Β·  좜처: celery/celery

λ‚΄κ°€ 일을 μ‹œμž‘ν•˜λ©΄ error: [Errno 104] Connection reset by peer λͺ¨μ„ κ²ƒμž…λ‹ˆλ‹€.
gevent 풀을 μ‚¬μš©ν•˜λ©΄ μž‘μ—…μžκ°€ μ‹œμž‘λœ ν›„ 3 뢄에 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

프리 포크 풀을 μ‚¬μš©ν•˜λ©΄ μž‘μ—…μžκ°€ μ‹œμž‘λœ ν›„ 15 뢄에 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

Not a Bug

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

Celery 4.2.2μ—μ„œ μ—¬μ „νžˆμ΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

λͺ¨λ“  57 λŒ“κΈ€

Celery 4.2.0μ—μ„œλ„ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. Celery 4.1.1μ—λŠ” μ—†μŠ΅λ‹ˆλ‹€. μ§€μ—­μ μœΌλ‘œ, 항상 그런 것은 μ•„λ‹ˆμ§€λ§Œ 자주 Errno 104λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. νŠΈλž˜λΉ„μŠ€ λΉŒλ“œμ—μ„œλŠ” 4.2.0μ—μ„œ 더 μ§€μ†μ μœΌλ‘œ μ‹€νŒ¨ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€ (4.1.1μ—μ„œ 성곡). @axiaoxin이 λ³΄κ³ ν•˜λŠ” μ‹œκ°„ μ˜μ‘΄μ„±μ„ μ•Œμ•„ 차리지

λ‹€μŒ λͺ…λ Ήμ˜ 좜λ ₯을 μ œκ³΅ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

$ celery -A proj report

μ•ˆλ…•ν•˜μ„Έμš” @georgepsarakis 이것은 제 λ³΄κ³ μ„œμž…λ‹ˆλ‹€

software -> celery:4.2.0 (windowlicker) kombu:4.2.1 py:2.7.5
            billiard:3.5.0.3 py-amqp:2.3.2
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.app.AppLoader
settings -> transport:amqp
results:sentinel://:**@10.18.7.1:26379/1;sentinel://:[email protected]:26379/1;sentinel://:[email protected]:26379/1

JSON_AS_ASCII: False
CACHED_OVER_EXEC_MILLISECONDS: 800
LOG_PEEWEE_SQL: False
SESSION_REFRESH_EACH_REQUEST: True
APP_ROOT_PATH: '/data/srv/zns/app'
REDIS_URL: 'redis://:[email protected]:6379/2'
PROJECT_ROOT_PATH: '/data/srv/zns'
FLATPAGES_ROOT: '/data/srv/zns/app/docs'
SESSION_COOKIE_SAMESITE: None
PROPAGATE_EXCEPTIONS: None
CELERYD_SEND_EVENTS: True
REDIS_LOCK_TIMEOUT: 1800
FAKE_HANDLE_TASK: False
SECRET_KEY: u'********'
BROKER_URL: u'amqp://notifer:********@zns.com:5672/notifer_celery_broker'
ENTRY_RATE_LIMIT: 0
SENTRY_DSN: 'http://6a0ce3f93804422da7321f45353c69d7:[email protected]/10'
SWAGGER: {
    'description': '<a href="/docs" target="_blank">\xe5\x85\xb6\xe4\xbb\x96\xe6\x96\x87\xe6\xa1\xa3</a>',
    'doc_expansion': 'list',
    'footer_text': u'\u6709\u4efb\u4f55\u7591\u95ee\u8bf7\u54a8\u8be2 ashinchen',
    'hide_top_bar': True,
    'specs': [{   'endpoint': 'apispec', 'route': '/apispec.json'}],
    'termsOfService': None,
    'title': 'zns API',
    'uiversion': 3,
    'version': '0.0.1'}
LOG_LEVEL: 'info'
APPLICATION_ROOT: '/'
SERVER_NAME: None
LOG_PATH: '/data/srv/zns/logs'
SERVICE_NAME: 'zns'
CELERYD_MAX_TASKS_PER_CHILD: 10000
TESTING: False
MYSQL_URL: 'mysql+pool://user:[email protected]:3306/zns?max_connections=40&stale_timeout=300'
TEMPLATES_AUTO_RELOAD: None
CELERY_RESULT_PERSISTENT: True
JSONIFY_MIMETYPE: 'application/json'
TOF_APP_KEY: u'********'
TOF_SYS_ID: 1
JSON_KEYCASE: u'********'
TOF_URL: 'http://tof.com/api/v1'
FLATPAGES_EXTENSION: ['.md', '.html', '.htm', '.txt']
SESSION_COOKIE_HTTPONLY: True
USE_X_SENDFILE: False
REQUESTS_POOL_SIZE: 10
API_BIND: u'********'
SESSION_COOKIE_SECURE: False
CACHED_EXPIRE_SECONDS: 60
REDIS_SENTINEL: {
    'db': 0,
    'master_name': 'redis-master',
    'nodes': [   ('10.18.7.1', 26379),
                 ('10.16.19.22', 26379),
                 ('10.16.19.21', 26379)],
    'password': u'********'}
SESSION_COOKIE_DOMAIN: None
SESSION_COOKIE_NAME: 'session'
EXCEPTION_RETRY_COUNT: 2
CELERY_TASK_RESULT_EXPIRES: 604800
MAX_COOKIE_SIZE: 4093
ENTRY_RATE_PER: 0
TOF_WEIXIN_SENDER: 'x-ashin'
ENV: 'production'
CELERYD_TASK_SOFT_TIME_LIMIT: 30
DEBUG: False
PREFERRED_URL_SCHEME: 'http'
EXPLAIN_TEMPLATE_LOADING: False
CELERY_RESULT_BACKEND:u'sentinel://:********@10.18.7.1:26379/1;sentinel://:pwd@'10.16.19.22:26379/1;sentinel://:[email protected]:26379/1'
CACHED_CALL: False
FLATPAGES_AUTO_RELOAD: False
MAX_CONTENT_LENGTH: None
REQUEST_ID_KEY: u'********'
NOTIFY_MODULE: 'tof'
JSONIFY_PRETTYPRINT_REGULAR: False
LOG_FUNC_CALL: True
PERMANENT_SESSION_LIFETIME: datetime.timedelta(31)
TOF_EMAIL_SENDER: '[email protected]'
REDIS_CLUSTER: {
    }
TRAP_BAD_REQUEST_ERRORS: None
JSON_SORT_KEYS: u'********'
TRAP_HTTP_EXCEPTIONS: False
SESSION_COOKIE_PATH: None
SEND_FILE_MAX_AGE_DEFAULT: datetime.timedelta(0, 43200)
SPLIT_LOGFILE_BY_LEVEL: False
PRESERVE_CONTEXT_ON_EXCEPTION: None
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS: {
    'master_name': 'redis-master'}
LOG_IN_FILE: False

이 λ³΄κ³ μ„œμ—μ„œ 일뢀 λΉ„λ°€λ²ˆν˜ΈλŠ” *둜 λŒ€μ²΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·Έλ§Œν•œ κ°€μΉ˜λŠ” rabbitmq와 ν•¨κ»˜ geventλ₯Ό μ‚¬μš©ν•˜λŠ” κΉ¨λ—ν•œ ν”„λ‘œμ νŠΈμ—μ„œλ„ 이것을보고 μžˆμŠ΅λ‹ˆλ‹€. λͺ‡ λΆ„ λ™μ•ˆ μ…€λŸ¬λ¦¬ μ›Œμ»€λ₯Ό μ‹œμž‘ν•˜λ©΄ μ—°κ²° μž¬μ„€μ •μ„ μˆ˜μ‹ ν•˜κ³  κ·Έ μ΄ν›„λ‘œλŠ” μž‘μ—…μ΄ μ†ŒλΉ„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

https://github.com/sihrc/celery-connection-reset

μ§€κΈˆκΉŒμ§€ λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. (μ…€λŸ¬λ¦¬ 4.2) μ…€λŸ¬λ¦¬ 버전을 4.1둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œν•˜μ—¬ ν•΄κ²°λ˜μ—ˆμ§€λ§Œμ΄ 였λ₯˜κ°€ λ°œμƒν•œ 이유λ₯Ό λͺ¨λ¦…λ‹ˆλ‹€.

λ§ˆμŠ€ν„°μ˜ λͺ¨λ“  쒅속성과 ν•¨κ»˜ λ§ˆμŠ€ν„° λΈŒλžœμΉ˜μ—μ„œ μ…€λŸ¬λ¦¬λ₯Ό μ„€μΉ˜ν•˜κ³  무슨 일이 μΌμ–΄λ‚˜λŠ”μ§€ λ³Ό 수 μžˆμŠ΅λ‹ˆκΉŒ?

Celery 4.2.2μ—μ„œ μ—¬μ „νžˆμ΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

@auvipy κ°μ‚¬ν•©λ‹ˆλ‹€, μž‘λ™ν•©λ‹ˆλ‹€!

@ yuda110 μ˜μ‘΄μ„± λ³€κ²½μœΌλ‘œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆλŠ”μ§€ μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

이 ConnectionReset λ¬Έμ œκ°€ λ°œμƒν•˜λ©° μ…€λŸ¬λ¦¬ μš”κ΅¬ 사항과 ν˜Έν™˜λ˜λŠ” λ‹€μŒ 버전이 κ³ μ • 된 μ…€λŸ¬λ¦¬ 4.2.1을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

billiard==3.5.0.4 # Celery needs billiard. There's a bug in 3.5.0.5
kombu==4.2.2-post1 # Celery needs kombu >= 4.2.0, < 5.0
redis==2.10.6

μ•ˆλ…•ν•˜μ„Έμš”.
μ•„, κ·Έ 닡을 μ§€μš°λŠ” κ±Έ μžŠμ—ˆ λ„€μš” ☹️☹️ 버전 μ—…κ·Έλ ˆμ΄λ“œ (4.2.1) ν›„ λ¬Έμ œκ°€ ν•΄κ²° 된 것 κ°™μ•˜λŠ”λ° 또 μ•Œ μˆ˜μ—†λŠ” λ¬Έμ œμ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€. κ²°κ΅­ 4.0 λ²„μ „μœΌλ‘œ λ‹€μš΄ κ·Έλ ˆμ΄λ“œν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€.

4.1둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œν•˜κ³  였λ₯˜λ₯Ό μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 4.3을 아직 μ‹œλ„ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

이 였λ₯˜λŠ” μš°λ¦¬μ—κ²Œ 거의 λ°œμƒν•˜μ§€ μ•ŠμœΌλ©° redis ν΄λΌμ΄μ–ΈνŠΈμ˜ ConnectionReset 였λ₯˜λ‘œ μ‹œμž‘ν•˜λŠ” 체인 μ˜ˆμ™Έλ‘œ λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€. Celery ChangeLog에 μž¬μ‹œλ„ κ°€λŠ₯ν•œ 였λ₯˜κ°€ μžˆμŒμ„ λ‚˜νƒ€ λ‚΄κΈ° λ•Œλ¬Έμ— kombu.exceptions.OperationalError κ°€ λ°œμƒν–ˆμ„ λ•Œ 재 μ‹œλ„λ₯Ό ν™œμ„±ν™”ν•˜κ² μŠ΅λ‹ˆλ‹€.

RabbitMQλ₯Ό μ‚¬μš©ν•  λ•Œ 4.3.0μ—μ„œ μ—¬μ „νžˆ λ¬Έμ œκ°€ μ§€μ†λœλ‹€κ³  λ§ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œ λ“  Redis둜 μ΄λ™ν•˜μ—¬ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

kombu.exceptions.OperationalError κ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€ μ§€μˆ˜ 백였 ν”„λ‘œ 재 μ‹œλ„ν•˜μ—¬μ΄ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ„œμ— λ”°λ₯΄λ©΄ 그것듀은 재 μ‹œλ„ 될 μ˜ˆμ •μž…λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” μš°λ¦¬μ—κ²Œ 거의 λ°œμƒν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 재 μ‹œλ„λŠ” 쒋은 ν•΄κ²°μ±…μž…λ‹ˆλ‹€. μš°λ¦¬λŠ” 4.2.1에 μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”,

λ‚˜λŠ” rabbitmqλ₯Ό λΈŒλ‘œμ»€μ™€ λ°±μ—”λ“œλ‘œ μ‚¬μš©ν•˜κ³  있으며 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

λˆ„κ΅¬λ“ μ§€ 해결책이 μžˆμŠ΅λ‹ˆκΉŒ?

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

여기에도 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이것은 100 % μž¬ν˜„ κ°€λŠ₯ν•©λ‹ˆλ‹€. μ–΄λ–€ 이유둜 λΈŒλ‘œμ»€μ— λŒ€ν•œ μ†ŒμΌ“μ€ ν•˜νŠΈ λΉ„νŠΈ κ°„κ²©μœΌλ‘œ λ³΄μ΄λŠ” μ‹œκ°„ 후에 μ£½μŠ΅λ‹ˆλ‹€.

λ³΄κ³ μ„œ:

software -> celery:4.3.0 (rhubarb) kombu:4.5.0 py:3.6.7
            billiard:3.6.0.0 py-amqp:2.4.2
platform -> system:Linux arch:64bit, ELF
            kernel version:4.18.0-20-generic imp:CPython
loader   -> celery.loaders.app.AppLoader
settings -> transport:amqp results:rpc:///

broker_url: 'amqp://guest:********<strong i="7">@localhost</strong>:5672//'
result_backend: 'rpc:///'
result_persistent: False
task_default_queue: 'something something'
result_expires: 3600
task_ignore_result: False
task_serializer: 'json'
result_serializer: 'json'
accept_content: ['json']
timezone: 'Europe/Berlin'
enable_utc: True

Erlang 22.0으둜 μ—…κ·Έλ ˆμ΄λ“œν–ˆμ„ λ•Œ λ¬Έμ œκ°€ μ‹œμž‘λ˜μ—ˆλ‹€κ³  λ§ν•΄μ•Όν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그것은 μš°μ—° 일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μˆ˜μ • 사항을 μ œμ•ˆ ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? κ°€λŠ₯ν•˜λ‹€λ©΄ 4.4.0rc2에 포함될 κ²ƒμž…λ‹ˆλ‹€.

4.3.0μ—μ„œλ„ gevent μž‘μ—…μžλ₯Ό μ‚¬μš©ν•˜μ—¬μ΄ λ™μž‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. geventμ—μ„œ prefork둜 μ „ν™˜ν•˜λ©΄ ν•΄κ²°λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 4.1.1둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œλ₯Ό μ‹œλ„ν–ˆμ§€λ§Œ Python 3.7μ—μ„œ μ»΄νŒŒμΌλ˜μ§€ μ•ŠλŠ” 이전 λ²„μ „μ˜ gevent (1.2.2)κ°€ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— Python 3.7μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ¬Έμ œκ°€ μ‹œμž‘λ˜λ©΄ rabbitmq λ‘œκ·Έμ— λ‹€μŒ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

missed heartbeats from client, timeout: 60s

ν₯λ―Έλ‘­κ²Œλ„ ν•˜νŠΈ λΉ„νŠΈκ°€ μ‹€νŒ¨ ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μž‘μ—…μžλŠ” μ—¬μ „νžˆ μž‘μ—…μ„ μ„ νƒν•˜κ³  잘 μ²˜λ¦¬ν•©λ‹ˆλ‹€. μž‘μ—…μžκ°€ λ‹€μ‹œ μ‹œμž‘λ  λ•ŒκΉŒμ§€ celery inspect λͺ…령이 λͺ¨λ‘ μ‹œκ°„ μ΄ˆκ³Όλ©λ‹ˆλ‹€. flower μ—¬μ „νžˆ μž‘μ—…μžμ˜ λŒ€μ‹œ λ³΄λ“œμ— 정보λ₯Ό ν‘œμ‹œν•˜μ§€λ§Œ μž‘μ—…μž 자체λ₯Ό ν΄λ¦­ν•˜λ©΄ 404 Not Found 였λ₯˜κ°€ λ°œμƒν•˜κ³  꽃은 celery inspect λͺ…λ Ήκ³Ό κ΄€λ ¨λœ 였λ₯˜λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.

monitor_1    | 2019-08-27 17:39:05.483286 [warning  ] 404 GET /worker/celery<strong i="11">@38245f8fef62</strong> (172.20.0.1): Unknown worker 'celery<strong i="12">@38245f8fef62</strong>' [tornado.general] 
monitor_1    | 2019-08-27 17:39:24.608962 [warning  ] 'stats' inspect method failed [flower.api.control] 
monitor_1    | 2019-08-27 17:39:24.609429 [warning  ] 'active_queues' inspect method failed [flower.api.control] 
monitor_1    | 2019-08-27 17:39:24.609847 [warning  ] 'registered' inspect method failed [flower.api.control] 
monitor_1    | 2019-08-27 17:39:24.610221 [warning  ] 'scheduled' inspect method failed [flower.api.control] 
monitor_1    | 2019-08-27 17:39:24.610905 [warning  ] 'active' inspect method failed [flower.api.control] 
monitor_1    | 2019-08-27 17:39:24.611369 [warning  ] 'reserved' inspect method failed [flower.api.control] 
monitor_1    | 2019-08-27 17:39:24.611890 [warning  ] 'revoked' inspect method failed [flower.api.control] 
monitor_1    | 2019-08-27 17:39:24.612512 [warning  ] 'conf' inspect method failed [flower.api.control] 

μ…€λŸ¬λ¦¬ 4.4.0rc3 + kombu 4.6.3μ—μ„œμ΄λ₯Ό 확인할 μ‚¬λžŒμ΄ ν•„μš”ν•˜μ‹­λ‹ˆκΉŒ?

ν•  κ²ƒμž…λ‹ˆλ‹€. 참고둜 μ…€λŸ¬λ¦¬ 4.4.0rc3μ—λŠ” λ‹€μ‹œλ§ˆ 4.6.4κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

celery 4.4.0rc3 has requirement kombu<5.0,>=4.6.4, but you'll have kombu 4.6.3 which is incompatible.

μ’‹μŠ΅λ‹ˆλ‹€. 4.4.0rc3이이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. gevent μž‘μ—…μžλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜νŠΈ λΉ„νŠΈ 였λ₯˜μ—†μ΄ 5 λΆ„ 이상 κ·ΈλŒ€λ‘œ λ‘μ—ˆμŠ΅λ‹ˆλ‹€.

kombu 4.6.3도 ν˜Έν™˜λ©λ‹ˆλ‹€.

이 경우 μ…€λŸ¬λ¦¬ ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬ 사항 νŒŒμΌμ„ μ—…λ°μ΄νŠΈ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μš°λ¦¬λŠ” 무엇을 λ°”κΏ¨μŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” λ˜ν•œ 이것이 λ‹«νžˆλŠ” 원인이 된 λ³€κ²½ 사항에 λŒ€ν•œ 톡찰λ ₯μ΄λ‚˜ PR / μ½”λ“œ / 등에 λŒ€ν•œ 링크λ₯Ό μ’‹μ•„ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” 영ν–₯을 λ°›μ•˜μœΌλ©° μ°¨μ„ μ±… 인 ν•˜νŠΈ λΉ„νŠΈλ₯Ό λΉ„ν™œμ„±ν™”ν•˜μ—¬μ΄λ₯Ό μ™„ν™”ν•©λ‹ˆλ‹€ (prefork, rabbitmq, celery 4.3).

@auvipy ν•‘?

μ’‹μŠ΅λ‹ˆλ‹€. 4.4.0rc3이이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. gevent μž‘μ—…μžλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜νŠΈ λΉ„νŠΈ 였λ₯˜μ—†μ΄ 5 λΆ„ 이상 κ·ΈλŒ€λ‘œ λ‘μ—ˆμŠ΅λ‹ˆλ‹€.

이 ν”Όλ“œλ°±μ— 따라 λ¬Έμ œκ°€ μ’…κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

@auvipy μœ μ‚¬ν•œ 였λ₯˜λ‘œ μ΄μ–΄μ§€λŠ” μ—¬λŸ¬ λ¬Έμ œκ°€μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 문제λ₯Ό ν•΄κ²°ν•˜κΈ° 전에 일뢀 이전 Celery 버전을 μ‚¬μš©ν•˜μ—¬ λ‘œμ»¬μ—μ„œ 버그λ₯Ό μž¬ν˜„ν•˜λ €κ³  μ‹œλ„ν–ˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

당신은 λ§ˆμŠ€ν„° 브랜치λ₯Ό μ‹œλ„ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

이전 버전 (예 : 4.1, 4.2, 4.3) 쀑 ν•˜λ‚˜λ‘œ 버그λ₯Ό μž¬ν˜„ν•˜κ³  4.4둜 μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν•œ μ‚¬λžŒμ˜ ν”Όλ“œλ°±μ„ 기반으둜 μžμ‹ μ˜ 확인없이 버그λ₯Ό λ‹«λŠ” 것은 μ•½κ°„ μ„±κΈ‰ν•˜κ²Œ λ³΄μž…λ‹ˆλ‹€.

λ¬Έμ œμ— 직면 ν–ˆμœΌλ―€λ‘œ μ œμ•ˆν•œλŒ€λ‘œ κ°€μž₯ λ¨Όμ € ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€. ν—‰

μ œμ•ˆν•œλŒ€λ‘œ κ°€μž₯ λ¨Όμ € ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€.

_ "Should"? _;) ν”„λ‘œμ νŠΈμ˜ ν’ˆμ§ˆμ— 관심을 _ν•΄μ•Όν•˜λŠ” _ λˆ„κ΅°κ°€κ°€ μžˆλ‹€λ©΄, 그것은 곡식 κ΄€λ¦¬μžμž…λ‹ˆλ‹€. μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 무료둜 μ œκ³΅ν•˜λŠ” 것에 κ°μ‚¬ν•˜μ§€λ§Œ λͺ¨λ“  μ‚¬μš©μžκ°€ ν”„λ‘œμ νŠΈμ— κΈ°μ—¬ν•  것이라고 ν˜„μ‹€μ μœΌλ‘œ κΈ°λŒ€ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“  문제λ₯Ό μΌμœΌν‚¨ ꡬ성은 더 이상 μ—†μ§€λ§Œ μž‘μ—…μ΄ μ •μ˜λ˜μ§€ μ•Šμ€ 빈 λŒ€κΈ°μ—΄μ˜ κ²½μš°μ—λ„ λ¬Έμ œκ°€ μ§€μ†λ˜λŠ” 것 κ°™μ•„ μž¬ν˜„ν•˜κΈ° μ‰¬μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. 우리 νŒ€μ΄ λ‹Ήμ‹œ κΈ°μˆ μ„ μ‰½κ²Œ λ³€κ²½ν•  수 μžˆμ—ˆκΈ° λ•Œλ¬Έμ— Redis둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 μ†”μ§νžˆ λ§ν•΄μ„œ Celery와 κ΄€λ ¨λœ λ‹€λ₯Έ 문제둜 인해 RQ 둜의 이전을 κ³ λ €ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

4.4.0rc4도이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.

그것을 확인할 μˆ˜μžˆλŠ” λ‹€λ₯Έ μ‚¬λžŒμ€ celery == 4.4.0rc4둜 μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

@auvipy λ‚˜λŠ” 가끔 Connection reset 와 ν•¨κ»˜ 4.3.0μ—μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 4.4.0rc4μ—μ„œ 더 이상 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

그것을 확인할 μˆ˜μžˆλŠ” λ‹€λ₯Έ μ‚¬λžŒμ€ celery == 4.4.0rc4둜 μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

4.3.0μ—μ„œ λ¬Έμ œκ°€ 자주 λ°œμƒν•©λ‹ˆλ‹€. 4.4.0rc4μ—μ„œλŠ” λ¬Έμ œκ°€ 훨씬 덜 λ°œμƒν•˜μ§€λ§Œ λ•Œλ•Œλ‘œ μ—¬μ „νžˆ λ°œμƒν•©λ‹ˆλ‹€.
redis-server 5.0.6 및 python redis Client 3.3.11을 ~ 14 개의 주기적 μž‘μ—… (30 μ΄ˆλ§ˆλ‹€)κ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ λ‚˜λŠ” λ‹Ήμ‹ μ—κ²Œ 문제λ₯Ό λ‹€μ‹œ μ—΄ 것을 μš”μ²­ν•©λ‹ˆλ‹€.
감사!

4.3.0μ—μ„œ λ¬Έμ œκ°€ 자주 λ°œμƒν•©λ‹ˆλ‹€. 4.4.0rc4μ—μ„œλŠ” λ¬Έμ œκ°€ 훨씬 덜 λ°œμƒν•˜μ§€λ§Œ λ•Œλ•Œλ‘œ μ—¬μ „νžˆ λ°œμƒν•©λ‹ˆλ‹€.
redis-server 5.0.6 및 python redis Client 3.3.11을 ~ 14 개의 주기적 μž‘μ—… (30 μ΄ˆλ§ˆλ‹€)κ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ λ‚˜λŠ” λ‹Ήμ‹ μ—κ²Œ 문제λ₯Ό λ‹€μ‹œ μ—΄ 것을 μš”μ²­ν•©λ‹ˆλ‹€.
감사

μ‹€μ œλ‘œμ΄ λ¬Έμ œλŠ” κΈ°λ³Έ μ„€μ •μœΌλ‘œ μ—¬μ „νžˆ λ°œμƒν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ broker_heartbeat = 0 μ—μ„œ celeryconfig.py broker_heartbeat = 0 λ₯Ό μ„€μ •ν•˜λ©΄ λ„μ›€μ΄λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

celery 4.4.0rc4 μ—…κ·Έλ ˆμ΄λ“œν•˜κ³  celery.py에 CELERY_BROKER_HEARTBEAT = 0 을 μΆ”κ°€ ν•œ 후에도 별닀λ₯Έ λ³€ν™”κ°€μ—†λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ μ—¬μ „νžˆ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μ…€λŸ¬λ¦¬ 4.2.0μ—μ„œ 4.10으둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œ ν•œ 후에도 λ¬Έμ œκ°€ ν•΄κ²°λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

Follwoing 버전은 우리 ν”„λ‘œμ νŠΈμ—μ„œ usinfμž…λ‹ˆλ‹€.
당ꡬ == 3.5.0.2, λ‹€μ‹œλ§ˆ == 4.1.0, μ…€λŸ¬λ¦¬ == 4.1.0, amqp == 2.4.2

μ œμ•ˆ ν•΄μ£Όμ„Έμš”

μš°λ¦¬λŠ” 이것을 λ³΄κ±°λ‚˜μ΄ λ¬Έμ œμ™€ 맀우 μœ μ‚¬ν•œ 것을보기 μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

μ†Œν”„νŠΈμ›¨μ–΄-> μ…€λŸ¬λ¦¬ : 4.3.0 (rhubarb) kombu : 4.5.0 py : 2.7.12
당ꡬ : 3.6.0.0 redis : 3.2.1

그것은 μ‹€μ œμ μΈ 변화없이 ν•˜λ£¨μ— λͺ‡ 번 λ°œμƒν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.
λ‹€μŒ λ¦΄λ¦¬μŠ€μ—μ„œλŠ” μ΅œμ‹  버전 인 celery 4.4.0, redis λ“±μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•˜κ³ λ³΄κ³  ν•  κ²ƒμž…λ‹ˆλ‹€.

(concurrency = 1000 (gevent) & redis as broker)와 ν•¨κ»˜ λ°œμƒν•©λ‹ˆλ‹€.
μ…€λŸ¬λ¦¬ == 4.4.0 (절벽)
kombu == 4.6.7
당ꡬ == 3.6.2.0
(py-) redis == 3.4.1

Redis μ„œλ²„ 버전 = 5.0.7
파이썬 3.7.3

https://sentry.io/share/issue/85f87e60a7c441198c082b9ebf051693/

  • 7 개의 μž‘μ—…μ΄ 10 μ΄ˆλ§ˆλ‹€ μ‹€ν–‰λ˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • 였λ₯˜λŠ” μ…€λŸ¬λ¦¬ λΉ„νŠΈμ—μ„œλ§Œ λ°œμƒν•˜λ©°, 맀우 λ“œλ¬Όκ²Œ 1 μ‹œκ°„μ— 3 건 미만으둜 λ°œμƒν•©λ‹ˆλ‹€.

νƒœκ·Έ

  • 둜거 : celery.beat
  • λŸ°νƒ€μž„ : CPython 3.7.5

ν™˜κ²½

  • Linux-4.15.0-1060-aws-x86_64-with-Ubuntu-18.04-bionic
  • Python 3.7.5 (κΈ°λ³Έκ°’, 2019 λ…„ 11 μ›” 7 일, 10:50:52) [GCC 8.3.0]
  • Redis μ„œλ²„ v = 4.0.9 sha = 00000000 : 0 malloc = jemalloc-3.6.0 bits = 64 build = 9435c3c2879311f3
  • μ…€λŸ¬λ¦¬ == 4.4.0
  • 당ꡬ == 3.6.1.0
  • kombu == 4.6.7
  • redis == 3.3.11

이것은 asyncio의 open_connection을 μ‚¬μš©ν•˜μ—¬ TCP μ„œλ²„μ— μ—°κ²°ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€. VPN λ‚΄μ—μ„œ 원격 μ„œλ²„μ— μ—°κ²°ν•˜κ³  15 λΆ„ 후에 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€. 연결이 유휴 μƒνƒœμ΄κΈ° λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. 원격 μ„œλ²„ λ‚΄μ—μ„œ μ—°κ²°ν•  λ•Œλ„ 같은 일이 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬μ™€ κ΄€λ ¨λœ 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚΄ 사건을 ν•΄κ²° ν–ˆμ–΄! μ–΄.

μ…€λŸ¬λ¦¬ λ¬Έμ œκ°€ μ•„λ‹ˆ μ—ˆμŠ΅λ‹ˆλ‹€. 4. [234] .0을 ν¬ν•¨ν•˜μ—¬ λͺ‡ 가지 버전을 μ‚¬μš©ν•΄ λ³΄μ•˜κ³ , redis에 λͺ‡ 가지 λ²„μ „μ˜ 파이썬 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 μ €λŠ” 항상 λ™μΌν•œ μ‹€νŒ¨μœ¨ (μš”μ²­ 50 만 건의 경우 μ•½ 2 ‰)을 더 μ μ—ˆμŠ΅λ‹ˆλ‹€.

해결책은 redis μ„œλ²„ μž¬κ΅¬μ„±, 즉 λͺ¨λ“  ν΄λž˜μŠ€μ— λŒ€ν•΄ ν΄λΌμ΄μ–ΈνŠΈ 좜λ ₯ 버퍼 μ œν•œμ„ λΉ„ν™œμ„±ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. redis λ¬Έμ„œ 에 λ”°λ₯΄λ©΄ :

ν•˜λ“œ ν•œκ³„μ— λ„λ‹¬ν•˜κ±°λ‚˜ μ†Œν”„νŠΈ ν•œκ³„μ— λ„λ‹¬ν•˜κ³  μ§€μ •λœ μ‹œκ°„ (연속) λ™μ•ˆ 도달 ν•œ μƒνƒœλ‘œ μœ μ§€λ˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ¦‰μ‹œ 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€.
…
ν•˜λ“œ λ˜λŠ” μ†Œν”„νŠΈ μ œν•œμ€ λͺ¨λ‘ 0으둜 μ„€μ •ν•˜μ—¬ λΉ„ν™œμ„±ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬λΆ„ λͺ¨λ‘μ—κ²Œ λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. μ•„λ‹ˆλ©΄ λ‚΄ μ†”λ£¨μ…˜μ„ κ°œμ„  ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄ 사건을 ν•΄κ²° ν–ˆμ–΄! μ–΄.

μ…€λŸ¬λ¦¬ λ¬Έμ œκ°€ μ•„λ‹ˆ μ—ˆμŠ΅λ‹ˆλ‹€. 4. [234] .0을 ν¬ν•¨ν•˜μ—¬ λͺ‡ 가지 버전을 μ‚¬μš©ν•΄ λ³΄μ•˜κ³ , redis에 λͺ‡ 가지 λ²„μ „μ˜ 파이썬 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 μ €λŠ” 항상 λ™μΌν•œ μ‹€νŒ¨μœ¨ (μš”μ²­ 50 만 건의 경우 μ•½ 2 ‰)을 더 μ μ—ˆμŠ΅λ‹ˆλ‹€.

해결책은 redis μ„œλ²„ μž¬κ΅¬μ„±, 즉 λͺ¨λ“  ν΄λž˜μŠ€μ— λŒ€ν•΄ ν΄λΌμ΄μ–ΈνŠΈ 좜λ ₯ 버퍼 μ œν•œμ„ λΉ„ν™œμ„±ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. redis λ¬Έμ„œ 에 λ”°λ₯΄λ©΄ :

ν•˜λ“œ ν•œκ³„μ— λ„λ‹¬ν•˜κ±°λ‚˜ μ†Œν”„νŠΈ ν•œκ³„μ— λ„λ‹¬ν•˜κ³  μ§€μ •λœ μ‹œκ°„ (연속) λ™μ•ˆ 도달 ν•œ μƒνƒœλ‘œ μœ μ§€λ˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ¦‰μ‹œ 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€.
…
ν•˜λ“œ λ˜λŠ” μ†Œν”„νŠΈ μ œν•œμ€ λͺ¨λ‘ 0으둜 μ„€μ •ν•˜μ—¬ λΉ„ν™œμ„±ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬λΆ„ λͺ¨λ‘μ—κ²Œ λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. μ•„λ‹ˆλ©΄ λ‚΄ μ†”λ£¨μ…˜μ„ κ°œμ„  ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이것은 λ‹€λ₯Έ μ œμ•ˆμ΄ μ—†μ—ˆλ˜ μ €μ—κ²Œλ„ νš¨κ³Όμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

μ„€μ • λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŒμ„ 확인할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. @rganowski에 μ‹œκ°„μ„ 투자 ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

이 λ°©λ²•μœΌλ‘œ λ¬Έμ œκ°€ ν•΄κ²°λœλ‹€λ©΄ μ’‹μ§€λ§Œ ꡬ성 νŒŒμΌμ—μ„œ 기본값을 μ œκ±°ν•˜κΈ° 전에 ν•΄λ‹Ή 섀정이 λ¬΄μ—‡μ„ν•˜λŠ”μ§€, μ™œ κΈ°λ³Έ κ΅¬μ„±μ˜ 일뢀인지 μ•„λŠ” 것이 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

@Moulde ꡬ성 νŒŒμΌμ—μ„œ 기본값을 μ‚­μ œν•˜λŠ” 것에 λŒ€ν•΄ λ§ν•˜λŠ” 것이 무엇을 μ˜λ―Έν•˜λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ–΄λ–€ ꡬ성 νŒŒμΌμž…λ‹ˆκΉŒ? λ‚΄κ°€ μ§€μ ν•œ κΈ°λ³Έ Redis μ„œλ²„ 섀정을 λ³€κ²½ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆκΉŒ?

λ˜ν•œ κ·ΈλŸ¬ν•œ 기본값이 μ‘΄μž¬ν•˜λŠ” 이유λ₯Ό μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ˜μ‹μ΄ μžˆμ—ˆλ‚˜μš”? λ§Œμ•½ κ·Έλ ‡λ‹€λ©΄ 그듀을 포기할 μœ„ν—˜μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ? ν•˜μ§€λ§Œ μ†”μ§νžˆ 말씀 λ“œλ¦¬μ§€ μ•Šκ² μŠ΅λ‹ˆλ‹€. 10MD μž‘μ—…μ΄ μžˆμ—ˆλŠ”λ° 3MDλ₯Ό 무료둜 μΆ”κ°€ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€.

아무도 그것이 문제λ₯Ό ν•΄κ²°ν•œλ‹€κ³  λ§ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‚΄ 사건에 λŒ€ν•œ 해결책을 μ°Ύμ•˜λ‹€ κ³  λ§ν–ˆλ‹€. λ‹€λ₯Έ 두 λͺ…μ˜ μΉœκ΅¬λ“€λ„ κ·Έλ“€μ—κ²Œλ„ νš¨κ³Όκ°€ μžˆλ‹€κ³  λ§ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것을 기쁘게 μ½μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ‚΄κ°€ 읽은 λ‹Ήμ‹ μ˜ 말은 "증λͺ…"μž…λ‹ˆλ‹€. λ‚΄κ°€ 잘λͺ»?

μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ ν…ŒμŠ€νŠΈν•˜κ³  νš¨κ³Όκ°€ μžˆλŠ”μ§€ μ•Œλ €μ£Όμ‹­μ‹œμ˜€. λ‹€λ₯Έ μ˜μ‹¬μ„ ν•΄κ²°ν•œλ‹€λ©΄ λ‹€λ₯Έ μ‚¬λžŒλ“€κ³Ό κ³΅μœ ν•˜λŠ” 것을 μžŠμ§€ λ§ˆμ‹­μ‹œμ˜€.

@rganowski μš°λ¦¬κ°€ λ™μ˜ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ„€, 제 말이 μ˜λ―Έν•˜λŠ” λ°”λ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 그런 μ˜λ―ΈλŠ” μ•„λ‹ˆμ§€λ§Œ μ‹œμŠ€ν…œ 기본값을 μˆ˜μ •ν•˜κΈ° 전에 μ•½κ°„μ˜ κ±΄μ „ν•œ νšŒμ˜λ‘ μ„ μΆ”κ°€ν•˜κ³  λ¬Έμ„œμ— λŒ€ν•œ μ•½κ°„μ˜ λΉ„νŒμ„ μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€. -ν•΄λ‹Ή 섀정이 ν•„μš”ν•œ μ΄μœ μ— λŒ€ν•œ 정보가 νŒŒμΌμ—μžˆλŠ” "무엇을 μˆ˜ν–‰ν•˜λŠ”μ§€"μ˜†μ—μžˆλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. :)
μ‹œκ°„μ„ λ‚΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 제 슀슀둜 μ•Œμ•„ 내지 λͺ»ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€.

Celery μ½”λ“œμ— 였λ₯˜κ°€ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ μ’…κ²°λ˜μ—ˆμ§€λ§Œ 문제이면의 λ¬Έμ œλŠ” ν•΄κ²°λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. redis λ°±μ—”λ“œ μ„€μ • λ¬Έμ„œμ— μ μ ˆν•œ κ²½κ³ κ°€ μΆ”κ°€λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

'client-output-buffer-limit'에 λŒ€ν•œ 인터넷 검색은 λ§Žμ€ ν₯미둜운 기사λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. 이미 6 년이 된 ν•œ μ‚¬λžŒμ€ 정말 μ•„λ¦„λ‹€μš΄ 제λͺ© 인 The Replication Buffer-How to avoid Devops Headachesλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€ . μ—¬κΈ°μ—μ„œ 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.

볡제 λ²„νΌμ˜ 크기λ₯Ό 늘리기 전에 컴퓨터에 μΆ©λΆ„ν•œ λ©”λͺ¨λ¦¬κ°€ μžˆλŠ”μ§€ ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€.

λ‹€λ₯Έ κΈ°μ‚¬μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ 버퍼-ν”„λ‘œλ•μ…˜μ—μ„œ Redisλ₯Ό μ‚¬μš©ν•˜κΈ° 전에 이것을 ν™•μΈν•˜μ‹­μ‹œμ˜€! μ €μžλŠ” λ§ν•œλ‹€ :

기본적으둜 일반 ν΄λΌμ΄μ–ΈνŠΈ (일반 μ‹€ν–‰ λͺ…λ Ή)λŠ” μš”μ²­μ—†μ΄ (ν‘Έμ‹œ λ°©μ‹μœΌλ‘œ) 데이터λ₯Ό μˆ˜μ‹ ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ œν•œλ˜μ§€ μ•Šκ³  μš”μ²­ 직후에 비동기 ν΄λΌμ΄μ–ΈνŠΈ 만 데이터가 κ°€λŠ₯ν•œ 것보닀 λΉ λ₯΄κ²Œ μš”μ²­λ˜λŠ” μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 읽닀.

그게 우리 사건 μ•„λ‹Œκ°€μš”?

λ‚˜μ—κ²Œ 적어도 μ§€κΈˆκΉŒμ§€λŠ” μž¬κ΅¬μ„±μ΄ κ΅¬μ›μœΌλ‘œ λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€. 정말 무겁고 즉각적인 λΆ€ν•˜μ—μ„œ μƒˆλ‘œμš΄ '104'였λ₯˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.

νŠΈμœ— λ‹΄μ•„ κ°€κΈ°

μ•ˆλ…•, λ‚˜λŠ” 맀우 μˆœμ§„ν•˜κ²Œ 듀릴 수 μžˆμ§€λ§Œ λͺ¨λ“  ν΄λž˜μŠ€μ— λŒ€ν•΄ client-output-buffer-limitλ₯Ό λΉ„ν™œμ„±ν™”ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μˆ˜μ •μ„ ν•  μˆ˜μžˆλŠ” 곳을 μ•Œλ €μ£Όμ‹­μ‹œμ˜€. λ‚˜λŠ” λ˜ν•œ 같은 였λ₯˜κ°€ λ°œμƒν•˜μ§€λ§Œ μ–΄λ–»κ²Œ λ“  κ·€ν•˜μ˜ λŒ€λ‹΅μ„ 해석 ν•  수 μ—†μŠ΅λ‹ˆλ‹€. ν•„μš”ν•œ 변경을 ν•  수 μžˆλ„λ‘ 닡변을 μžμ„Ένžˆ μ„€λͺ…ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? κ°μ‚¬ν•©λ‹ˆλ‹€!

Celery μ½”λ“œμ— 였λ₯˜κ°€ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ μ’…κ²°λ˜μ—ˆμ§€λ§Œ 문제이면의 λ¬Έμ œλŠ” ν•΄κ²°λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. redis λ°±μ—”λ“œ μ„€μ • λ¬Έμ„œμ— μ μ ˆν•œ κ²½κ³ κ°€ μΆ”κ°€λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

'client-output-buffer-limit'에 λŒ€ν•œ 인터넷 검색은 λ§Žμ€ ν₯미둜운 기사λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. 이미 6 년이 된 ν•œ μ‚¬λžŒμ€ 정말 μ•„λ¦„λ‹€μš΄ 제λͺ© 인 The Replication Buffer-How to avoid Devops Headachesλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€ . μ—¬κΈ°μ—μ„œ 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.

볡제 λ²„νΌμ˜ 크기λ₯Ό 늘리기 전에 컴퓨터에 μΆ©λΆ„ν•œ λ©”λͺ¨λ¦¬κ°€ μžˆλŠ”μ§€ ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€.

λ‹€λ₯Έ κΈ°μ‚¬μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ 버퍼-ν”„λ‘œλ•μ…˜μ—μ„œ Redisλ₯Ό μ‚¬μš©ν•˜κΈ° 전에 이것을 ν™•μΈν•˜μ‹­μ‹œμ˜€! μ €μžλŠ” λ§ν•œλ‹€ :

기본적으둜 일반 ν΄λΌμ΄μ–ΈνŠΈ (일반 μ‹€ν–‰ λͺ…λ Ή)λŠ” μš”μ²­μ—†μ΄ (ν‘Έμ‹œ λ°©μ‹μœΌλ‘œ) 데이터λ₯Ό μˆ˜μ‹ ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ œν•œλ˜μ§€ μ•Šκ³  μš”μ²­ 직후에 비동기 ν΄λΌμ΄μ–ΈνŠΈ 만 데이터가 κ°€λŠ₯ν•œ 것보닀 λΉ λ₯΄κ²Œ μš”μ²­λ˜λŠ” μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 읽닀.

그게 우리 사건 μ•„λ‹Œκ°€μš”?

λ‚˜μ—κ²Œ 적어도 μ§€κΈˆκΉŒμ§€λŠ” μž¬κ΅¬μ„±μ΄ κ΅¬μ›μœΌλ‘œ λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€. 정말 무겁고 즉각적인 λΆ€ν•˜μ—μ„œ μƒˆλ‘œμš΄ '104'였λ₯˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.

λ¬Έμ„œ κ°œμ„  PR에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

@ girijesh97 @auvipy

redis.confμ—μ„œ

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 0 0 0
client-output-buffer-limit pubsub 0 0 0

@rganowski Sir λ‹€μ‹œ λ‚˜λŠ” 맀우 μˆœμ§„ν•˜κ²Œ 듀릴 수 μžˆμ§€λ§Œ μ…€λŸ¬λ¦¬ (버전 4.4.2)λ₯Ό μ‚¬μš©ν•˜κ³  μ—°κ²° 였λ₯˜ λ¬Έμ œμ— 직면 ν•œ Django μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 redis.conf νŒŒμΌμ„ μ°Ύκ±°λ‚˜ μƒμ„±ν•˜λŠ” 데 도움을 μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? 이 νŒŒμΌμ„ λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ λ§Œλ“€μ–΄μ•Όν•©λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ 일뢀 νŒ¨ν‚€μ§€μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

κ·€ν•˜μ˜ κ²½μš°κ°€ λ™μΌν•˜λ‹€λ©΄ μ…€λŸ¬λ¦¬κ°€ redis μ„œλ²„ κ²°κ³Ό λ°±μ—”λ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ–ΈκΈ‰ ν•œ νŒŒμΌμ€ ν‘œμ€€ redis μ„œλ²„ ꡬ성 νŒŒμΌμž…λ‹ˆλ‹€. 이것이 사싀 μ…€λŸ¬λ¦¬ λ¬Έμ œκ°€ μ•„λ‹ˆλΌ λΆ€μž‘μš© 인 μ΄μœ μž…λ‹ˆλ‹€.

@auvipy λ™μΌν•œ λ¬Έμ œμ— λŒ€ν•œ 브둜컀 및 κ²°κ³Ό λ°±μ—”λ“œλ‘œ RabbitMQ에 λŒ€ν•œ μˆ˜μ • 사항이 μžˆμŠ΅λ‹ˆκΉŒ? μž₯κΈ° μ‹€ν–‰ μž‘μ—…μ—μ„œλ„ 4.4μ—μ„œμ΄λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μˆ˜μ • 사항은 redis λ°±μ—”λ“œ μ „μš©μž…λ‹ˆλ‹€.

λ˜ν•œμ΄ λ¬Έμ œλŠ” RabbitMQ 및 celery 4.2.0μ—μ„œ κ°„ν—μ μœΌλ‘œ λ°œμƒν•©λ‹ˆλ‹€. νŒ¨ν‚€μ§€ μ‚¬μš©μžμ—κ²Œ κ°•μ œν•˜λŠ” 것이 μ•„λ‹ˆλΌ μž¬μ‹œλ„ 처리 κΈ°λŠ₯이 λ‚΄μž₯ 된 κ²½μš°μ—λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

λ‚˜λŠ” λ˜ν•œ 그것을 κ²½ν—˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ €λŠ” Celery 4.3.0 및 RabbitMQ 3.3.5λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰