Процесс 'forkPoolworker-5' pid:111 завершился с 'сигналом 9 (SIGKILL)'
здравствуйте все, кто мне поможет? python:3.8
Django==4.0.4
celery==5.2.1
Я использую python/Django/celery, чтобы сделать кое-что, когда я получаю данные из hive по sql, мой celely worker получает эту ошибку "process 'forkPoolworker-5' pid:111 exited with 'signal 9 (SIGKILL)'", а затем, моя задача не используется для завершения и tcp connect закрывается! что я могу сделать для решения этой проблемы?
Я пытаюсь сделать:
CELERYD_MAX_TASKS_PER_CHILD = 1 # 单work最多任务使用数
CELERYD_CONCURRENCY = 3 # 单worker最大并发数
CELERYD_MAX_MEMORY_PER_CHILD = 1024*1024*2 # 单任务可占用2G内存
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 * 3
-Ofair
но они не используются для решения.
SIGKILL поднимается системой, скорее всего, из-за памяти или хранения, проследите, сколько памяти занимает задача celery, запустив опцию -P solo
или -c 1
и выделите достаточное количество памяти соответственно.
Для проверки использования памяти используйте pmap <pid>
или ps -a -o rss,vsz
. Пожалуйста, найдите rss и vsz для более подробной информации (вкратце rss
- это оперативная память, а vsz
- виртуальная память).
CELERYD_MAX_TASKS_PER_CHILD = 1
убивает процесс после каждого задания, поэтому CELERYD_MAX_MEMORY_PER_CHILD
не влияет, т.е. рабочий ждет завершения задания, прежде чем применить ограничение на запущенный дочерний процесс.