Dans mon /etc/defaults/celeryd
fichier de configuration, j'ai défini:
CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"
Je comprends que le démon génère 8 travailleurs de céleri, mais je ne sais pas vraiment ce que autoscale
et concurrency
font ensemble. Je pensais que la simultanéité était un moyen de spécifier le nombre maximal de threads qu'un travailleur pouvait utiliser et la mise à l'échelle automatique était un moyen pour le travailleur d'augmenter et de réduire les enfants travailleurs, si nécessaire.
Les tâches ont une charge utile plus importante (environ 20 à 50 Ko) et il y a environ 2-3 millions de ces tâches, mais chaque tâche s'exécute en moins d'une seconde. Je constate une augmentation de l'utilisation de la mémoire, car le courtier distribue les tâches à chaque travailleur, répliquant ainsi la charge utile plusieurs fois.
Je pense que le problème est dans la configuration et que la combinaison de travailleurs + accès simultané + mise à l'échelle automatique est excessive et j'aimerais mieux comprendre ce que font ces trois options.
Distinguons les travailleurs et les processus de travail. Vous générez un travailleur de céleri, cela engendre ensuite un certain nombre de processus (en fonction de choses comme --concurrency
et --autoscale
, la valeur par défaut est de générer autant de processus que de cœurs sur la machine). Il est inutile d'exécuter plusieurs travailleurs sur une machine particulière, sauf si vous souhaitez effectuer un routage.
Je suggère d'exécuter un seul travailleur par machine avec le nombre de processus par défaut. Cela réduira l'utilisation de la mémoire en éliminant la duplication des données entre les travailleurs.
Si vous avez toujours des problèmes de mémoire, enregistrez les données dans un magasin et transmettez uniquement un identifiant aux employés.