68
votes

L'allocation de validation du code WASM a échoué - le processus hors de la mémoire

J'ai un script NodeJS qui fonctionnait bien sur Nodejs 12. J'ai obtenu un nouveau MacBook Air sur lequel j'ai installé NodeJS LTS 14. Les scripts ne fonctionnaient pas comme prévu, donc je l'ai dégradé à NodeJS 12 LTS. Maintenant, je reçois une erreur de processus hors de la mémoire. J'ai également essayé d'utiliser --max-end-size pour augmenter l'allocation de mémoire.

Export Node_options = - Max_old_space_size = 4096

Cela n'a pas fonctionné. Voici la trace de pile pour l'erreur

<--- Last few GCs --->

[8193:0x150008000]       41 ms: Scavenge 2.9 (4.9) -> 2.7 (5.7) MB, 0.5 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure 
[8193:0x150008000]       54 ms: Scavenge 3.9 (5.9) -> 3.6 (8.6) MB, 0.3 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure 
[8193:0x150008000]       59 ms: Scavenge 5.2 (8.6) -> 3.9 (9.1) MB, 0.2 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure 


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x00010b1808d1 <JSObject>
    0: builtin exit frame: new constructor(aka Module)(this=0x000102ea1961 <Object map = 0x10b3ecbc9>,0x000102ea1811 <Uint8Array map = 0x102fc2b99>,0x000102ea1961 <Object map = 0x10b3ecbc9>)

    1: ConstructFrame [pc: 0x100ca8758]
    2: StubFrame [pc: 0x100d91204]
    3: /* anonymous */ [0x102ea10b1] [/Applications/XAMPP/xamppfiles/htdocs/web-dev/local-cron-jobs/node_modules/long/src/long.js:9...

FATAL ERROR: wasm code commit Allocation failed - process out of memory
 1: 0x1004db324 node::Abort() [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 2: 0x1004db4a4 node::errors::TryCatchScope::~TryCatchScope() [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 3: 0x1005fab78 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 4: 0x1005fab0c v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 5: 0x100b332bc v8::internal::wasm::WasmCodeAllocator::AllocateForCodeInRegion(v8::internal::wasm::NativeModule*, unsigned long, v8::base::AddressRegion) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 6: 0x100b34198 v8::internal::wasm::NativeModule::CreateEmptyJumpTableInRegion(unsigned int, v8::base::AddressRegion) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 7: 0x100b33660 v8::internal::wasm::NativeModule::AddCodeSpace(v8::base::AddressRegion) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 8: 0x100b33fd4 v8::internal::wasm::NativeModule::NativeModule(v8::internal::wasm::WasmEngine*, v8::internal::wasm::WasmFeatures const&, bool, v8::internal::VirtualMemory, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, std::__1::shared_ptr<v8::internal::Counters>, std::__1::shared_ptr<v8::internal::wasm::NativeModule>*) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
 9: 0x100b36214 v8::internal::wasm::WasmCodeManager::NewNativeModule(v8::internal::wasm::WasmEngine*, v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, unsigned long, bool, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
10: 0x100b3cb1c v8::internal::wasm::WasmEngine::NewNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, unsigned long, bool, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
11: 0x100b3ca64 v8::internal::wasm::WasmEngine::NewNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
12: 0x100b14578 v8::internal::wasm::CompileToNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::ErrorThrower*, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, v8::internal::wasm::ModuleWireBytes const&, v8::internal::Handle<v8::internal::FixedArray>*) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
13: 0x100b3a710 v8::internal::wasm::WasmEngine::SyncCompile(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::ErrorThrower*, v8::internal::wasm::ModuleWireBytes const&) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
14: 0x100b5bc98 v8::(anonymous namespace)::WebAssemblyModule(v8::FunctionCallbackInfo<v8::Value> const&) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
15: 0x10065f150 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
16: 0x10065e4b8 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<true>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
17: 0x10065dfb4 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
18: 0x100d2b0cc Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
19: 0x100ca8758 Builtins_JSBuiltinsConstructStub [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
20: 0x100d91204 Builtins_ConstructHandler [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
21: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
22: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
23: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
24: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
25: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
26: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
27: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
28: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
29: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
30: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
31: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
32: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
33: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
34: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
35: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
36: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
37: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
38: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
39: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
40: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
41: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
42: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
43: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
44: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
45: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
46: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
47: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
48: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
49: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
50: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
51: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
52: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
53: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
54: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
55: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
56: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
57: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
58: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
59: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
60: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
61: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
62: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
63: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
64: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
65: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
66: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
67: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
68: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
69: 0x100cad520 Builtins_InterpreterEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
70: 0x100caa5a8 Builtins_JSEntryTrampoline [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
71: 0x100caa24c Builtins_JSEntry [/Users/rahulbharati/.nvm/versions/node/v12.20.1/bin/node]
72: 0x150008000 ```

Any help appreciated. Thanks.


0 commentaires

7 Réponses :


46
votes

Ce problème a été résolu dans nœud 15.3.0 .

J'ai mis à jour le mien et cela a bien fonctionné pour moi.


5 commentaires

Cela n'a pas fonctionné pour moi. J'ai complètement le nœud JS désinstallé et installe Nodejs 12 via Homebrew Il a fonctionné


Ce n'est qu'une solution si vous pouvez passer à la V15, mais comme 14 est la version LTS, les gens ont probablement besoin de celui-ci.


Si vous êtes sur M1, vous voudrez peut-être passer au nœud 16.


Malheureusement, la mise à niveau du nœud n'est pas toujours une option. Heureusement, il y a un travail pour ceux qui ne peuvent pas mettre à niveau: stackoverflow.com/a/67813764/4826740


Je peux confirmer que le dernier nœud 14 a également résolu ce problème.



6
votes

en utilisant NVM installé à partir de GitHub sur M1.

exécutait v14.x

NVM Installer 15.3

La compilation a pris environ 10 minutes.

fonctionne maintenant.


1 commentaires

Cela a fonctionné pour moi, merci. N'oubliez pas de passer à la nouvelle version de nœud en tapant "NVM Utiliser 15.3"



48
votes

Actuellement, le nœud sur M1 MacOS ne fonctionne pas bien, sauf le nœud @ 15. Si vous utilisez Node @ 12 construit sur l'architecture ARM64, il peut être écrasé sur certains scripts tels que https: / /github.com/dcodeio/long.js.git

Vous pouvez le vérifier si vous exécutez des cas de test dans le référentiel long.js.

Si vous souhaitez savoir sur lequel votre Le nœud est construit, veuillez suivre ceci:

$ node

Welcome to Node.js v12.21.0.
Type ".help" for more information.
>
> process.arch
'arm64'

L'exemple ci-dessus signifie que le binaire de nœud est construit pour l'architecture ARM64 (puce Apple Silicon M1). Si le nœud est exécuté sur Rosetta2, il affichera 'x64'.

J'ai testé certains cas de test dans le référentiel source long.js et node.js.

  • Node @ 15 pour ARM64: pas de problème
  • Node @ 12 pour ARM64: quelques erreurs dans les cas de test long.js et node.js
  • nœud @ 12 pour x64: pas de problème

Comme je le sais, Node @ 12 pour ARM64 fonctionne bien pour certains scripts, mais certains scripts ont été écrasés tels que long.js.

Modifier

sur 21 juin 2021, nœud @ 14 sur homebrew a passé des cas de test long.js pour ARM64. (v14.17.1) Bien sûr, le nœud @ 16 le prend également en charge.

Mais, le nœud @ 12 a toujours des erreurs. (v12.22.1)


3 commentaires

Merci je jouais avec tous les types de choses


J'ai trouvé que la section M1 des Docs NVM était utile pour dépasser cela aussi: github.com/nvm-sh/nvm#install-update-script


Plus précisément: github.com/nvm-sh/nvm#macos-troulesshooting



30
votes

Ce bloc de code a pu me dépasser cette erreur frustrante:

$ node
> process.arch
'x64'

Envisagez de remplacer 14 ci-dessus avec la version de nœud que vous essayez d'exécuter.

Après l'installation, vous pouvez exécuter nœud suivi process.arch pour confirmer que le nœud s'exécute en mode x64:

$ nvm uninstall 14
$ arch -x86_64 zsh 
$ nvm install 14
$ nvm alias default 14


6 commentaires

Solution la plus simple pour moi 👍. Veuillez noter que vous pouvez toujours utiliser votre coquille préférée. Exemple: $ arch -x86_64 bash


Je suis confronté à un problème de chaleur après avoir fait ça


A travaillé pour mon M1 MacBook Air. Merci.


Merde, je frappais la tête au mur pendant des heures. Tu m'as sauvé la vie.


Cela fonctionne pour moi. J'utilise MBP M1PRO et j'ai obtenu une exception OOM avec le nœud 12.16.1. Après avoir utilisé cette solution pour utiliser NVM, l'exception a disparu. Remarque: Auparavant, j'ai installé le nœud avec Brew, après l'installation de l'arc commuté L Brew à nouveau, mais j'ai obtenu cette erreur: Erreur: Impossible d'installer sous Rosetta 2 dans le préfixe par défaut du bras (/ opt / homebrew)! Pour relancer Utilisation du bras: arch -arm64 l'installation de l'installation ... Pour installer sous x86_64, installez Homebrew dans / usr / local. Je dois donc me tourner pour utiliser NVM à la place


J'ai vu NVM fournir ici des instructions officielles: github.com/nvm-sh/nvm#macos- Dépannage (Rechercher le mot-clé m1 )



3
votes

J'obtenais cette erreur avec la version du nœud v14 .

Pour résoudre ce problème, j'ai installé NVM (Node Version Manager). Avec l'aide de cela, j'ai pu installer la dernière version du nœud, c'est-à-dire v15. Après avoir installé la dernière version, je n'ai eu aucune erreur. De plus, avec Node Version Manager (NVM), on peut facilement modifier les versions de Node, si nécessaire pour un certain projet. Cela peut parfois être très utile.

bonne chance!


0 commentaires

1
votes

J'ai pu corriger le crash avec v14.16.0 en appliquant les modifications de ceci Pull Demande En tant que patch lors de la compilation de nœuds.

Pour simplifier cela, j'ai créé un gist avec le patch .

avec nœud-build / nodenv

Commandes d'installation:

Xxx

Lorsque vous n'utilisez pas nodenv , vous devez remplacer $ (novenv root) / versions/14.16.0 par le chemin où vous souhaitez installer nœud.

Sans node-build

Lorsque vous n'utilisez pas de nœud-build, vous devriez être en mesure d'appliquer le patch à la source vous-même en utilisant Git-Apply:

Xxx

ou à l'aide de la commande patch:

patch -p1 < node-14.16.0.patch


0 commentaires

33
votes

Impossible de mettre à niveau le nœud et a besoin d'une solution rapide de deux minutes?

Pour quiconque est sur un ordinateur M1 et qui souffre de ce problème et ne peut pas mettre à niveau sa version de nœud pour la raison, il y a toujours une solution rapide et facile:

  • Accédez à votre dossier Application / Utilities où réside votre terminal. (Un moyen facile de trouver cela est un clic droit sur votre icône du terminal et cliquez sur " Ouvrir dans Finder ".) Voici une capture d'écran: Image illustrant le répertoire de l'application / utilitaires et cliquant avec le bouton droit sur l'application
  • Cliquez avec le bouton droit sur le terminal et cliquez sur "Duplicate", puis renommez le nouveau terminal à quelque chose comme " rosetta-terminal ". (en bas à gauche dans la capture d'écran ci-dessus.)
  • Cliquez avec le bouton droit sur Rosetta-terminal -> "Obtenez des informations" -> Sélectionnez "Ouvrir à l'aide de Rosetta". Image du terminal dupliqué qui affiche le clic d'option
  • Ouvrez maintenant la rosetta-terminal et en utilisant nvm Type nvm désinstallez votre.version.here . (Remarque: il peut dire qu'il n'est pas en mesure de l'installer car vous l'utilisez actuellement, auquel cas il suffit d'installer une autre version temporairement et de l'utiliser.) Si vous n'avez pas nvm alors vous pouvez alors l'installer ici ou en fonctionnant: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash .
  • nvm Installez votre.version.here
  • Boom, maintenant votre nœud est installé sous rosetta Et cela devrait fonctionner bien sans avoir besoin de mettre à niveau votre version de nœud.

    Rosetta est le moyen d'Apple d'autoriser les applications conçues pour que la puce Intel fonctionne avec Apple Silicon.

    Il n'est pas toujours facile de mettre à niveau votre version de nœud comme d'autres réponses semblent le suggérer. Par exemple, vous avez peut-être d'autres dépendances qui nécessitent une version de nœud spécifique et la mise à niveau de ces dépendances nécessiterait un ascenseur et un décalage significatifs de votre application - heureusement pour les scénarios, nous avons Rosetta.


    5 commentaires

    Existe-t-il un moyen de rendre ce nouveau terminal (et non mon autre) toujours ouvert en rouge?


    @WillimentRiken Malheureusement, je ne sais pas totalement comment vous pouvez faire cela, je suppose qu'il y a un réglage de configuration quelque part pour forcer celui-ci par rapport à l'autre


    Cela a fonctionné pour moi. J'avais besoin d'exécuter Rosetta-terminal une fois, juste pour obtenir le nœud ARM64 approprié, qui a pris quelques secondes à installer. Après cela, j'étais de retour au terminal par défaut.


    Vous voudrez peut-être décocher "ouvrir avec Rosetta" après avoir fonctionné afin que vous puissiez bénéficier du M1 ailleurs.


    @dijonkitchen Je recommanderais d'utiliser encore les autres terminaux non-Rosetta pour ce type de choses