J'analyse ~250K XML et charge les données dans une base de données SQLite. Je suis en train d'utiliser la version 10.15.1 de node avec cheerio
y better-sqlite3
sur un ordinateur portable Mac OS X avec 8 Go de mémoire. Je suis readdirSync
-L'analyse de tout le dossier de ~250K fichiers, l'analyse des fichiers XML et le chargement des données extraites en utilisant des transactions par lots de 10K. J'utilise --max_old_space_size=4096
mais on obtient toujours le FATAL ERROR : Ineffective mark-compacts près de la limite du tas L'allocation a échoué - le tas de JavaScript n'a plus de mémoire. .
Maintenant, si je traite 100K fichiers, puis quitte le nœud, puis recommence et traite les ~150K fichiers restants, alors tout fonctionne. Mais, je préférerais le faire en une seule fois car c'est quelque chose qui doit être fait sans surveillance. Y a-t-il autre chose que je puisse faire compte tenu de mes contraintes ? Je ne peux pas utiliser une machine avec plus de mémoire car je n'y ai pas accès. Je pourrais essayer d'augmenter le --max_old_space_size
un peu plus, ou je pourrais essayer de faire de plus petits lots de transactions, mais je ne suis pas sûr que cela aide (j'ai essayé avec 8000 fichiers par transaction au lieu de 10K, mais cela aussi a manqué de mémoire). La seule chose qui semble aider pour le moment est de quitter le nœud entre les deux. Y a-t-il un moyen de simuler cela ? C'est-à-dire, dire au nœud de libérer toute la mémoire et prétendre qu'il a été redémarré ? D'autres idées ?