Сельдерей - утечка памяти (память не освобождается даже после того, как работник выполнил задание) - PullRequest
1 голос
/ 11 октября 2019

У меня работает атомарная транзакция на сервере сельдерея, которая потребляет много памяти, но память не освобождается после завершения задачи.

Решение, которое мне помогло, - убить работника сельдерея после N задач, т.е. использовать - CELERYD_MAX_TASKS_PER_CHILD .

Есть ли другое решение этой проблемы? какое должно быть правильное число для CELERYD_MAX_TASKS_PER_CHILD , если сельдерей получает около 10000 заданий в день

1 Ответ

0 голосов
/ 27 октября 2019

Есть открытый выпуск на сельдерее, который, возможно, стоит проверить.

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

Вы можете измеритьвремя, необходимое для запуска и смерти процессов. Например, если для выполнения ваших задач требуется 20 секунд, и процессы запускаются и, наконец, умирают, и 2 секунды, а допустимые накладные расходы равны 5%, вы можете установить для параметра CELERYD_MAX_TASKS_PER_CHILD значение 2. Это зависит от количества накладных расходов и утечки. могу терпеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...