J'ai 4 fonctions lambda qui seront appelées en même temps (par SNS), la fréquence de l'événement de SNS est de 5 minutes . Chaque fonction traite le montage volumineux de données et d'images (~ 300 Mo), je les stocke donc dans le dossier /tmp
(Limite de 500 Mo).
Au début de mon utilisation, j'ai écrit du code dans le dossier clean up /tmp
pour m'assurer qu'il ne manque pas de mémoire (AWS lambda réutilise parfois le conteneur précédent pour améliorer les performances).
Je vérifie manuellement (créer un message et publier par SNS à 4 fonctions lambda), cela a bien fonctionné.
Mais quand il s'exécute automatiquement (invoqué toutes les 5 minutes), le résultat n'est pas à la hauteur de mes attentes. La première exécution est correcte, mais les fois suivantes, 1 ou 4 fonctions lambda éliminent l'erreur liée à "mémoire insuffisante": "Il ne reste plus d'espace sur le périphérique", impossible de charger lib, ...
Précédent, j'utilise nodejs (4.3), cela a bien fonctionné dans les deux cas.
Mais je dois passer à python pour une raison quelconque, le flux principal et le montage des données créées sont les mêmes. Mais c'est un échec lorsqu'il est exécuté automatiquement.
Je pense que le problème venait du cache du conteneur précédent (conteneur réutilisé), j'ai vérifié le /tmp
après le nettoyage (ls -alh /tmp
) il n'y a pas de fichier, mais lors de la vérification du stockage (df /tmp
), il indique que le nombre utilisé est de 77%.
Toute suggestion de créer un dossier propre /tmp
ou une solution de contournement est très appréciée. Remercier!
Édité: Code que j'utilise pour nettoyer le dossier /tmp
:
from subprocess import call
...
call('rm -rf /tmp/*', Shell=True)
Oui, lambda étant un service géré; ils réutilisent la même ressource sous-jacente si le lambda est invoqué à plusieurs reprises. Il s’agissait d’un problème de production auquel nous avons dû faire face et que nous avons corrigé en supprimant le fichier/tmp. Sur une note distincte, AWS devrait en faire mention dans sa FAQ.
if os.path.exists(tmp_file_path):
os.remove(tmp_file_path)
print("Removed the file %s" % tmp_file_path)
else:
print("Sorry, file %s does not exist." % tmp_file_path)
Les conteneurs sont souvent réutilisés, mais pas simultanément. Nettoyez votre répertoire temporaire lorsque la fonction est terminée et voyez si le problème est résolu.