2012-05-25 9 views
6

Ich arbeite in einer eingebetteten Umgebung, in der Ressourcen ziemlich begrenzt sind. Wir versuchen, node.js zu verwenden, was gut funktioniert, aber normalerweise ungefähr 60 Megabyte virtuellen Speicher verbraucht (der verwendete reale Speicher ist ungefähr 5 Megabyte). Angesichts unserer Beschränkungen ist dies zu viel virtueller Speicher; Wir können es uns nur leisten, dass node.js maximal 30 Megabyte VM verwenden darf.Wie kann die Verwendung von virtuellem Speicher durch node.js begrenzt werden?

Es gibt mehrere Befehlszeilenoptionen für node.js, wie „--max_old_space_size“, „--max_executable_size“ und „--max_new_space_size“, aber nach dem Experimentieren finde ich, dass diese alle Realspeicher steuern Nutzung, nicht maximale Größe des virtuellen Speichers.

Wenn es darauf ankommt, arbeite ich in einer Ubuntu-Linux-Variante auf einer ARM-Architektur.

Gibt es eine Option oder Einstellung, die es einem ermöglicht, die maximale Menge an virtuellem Speicher festzulegen, die ein Prozess node.js verwenden darf?

+0

Warum sollte das ein Problem sein? Linux verwendet eine Überbelegung: Dieser virtuelle Speicher existiert nur als Einträge in der Prozess-Seitentabelle, bis er * tatsächlich * verwendet wird. –

+0

Hm. Ich bin mir nicht sicher. Dies ist eine eingebettete Umgebung (dh: kein Speicherplatz). Würden also nicht alle virtuellen Zuweisungen etwas echten Speicher verbrauchen? Ich werde diesen Gedanken meinem Chef zeigen, aber ich habe das Gefühl, dass es keinen Unterschied machen wird; Ich wurde angewiesen, den Fußabdruck zu reduzieren, und zu argumentieren, dass ich nicht müsste, wird nicht viel Gewicht tragen. Der "Kunde hat immer Recht". Außerdem bin ich auf ein anderes Problem gestoßen. Ich schrieb eine Funktion mit setrlimit(), um die Nutzung des virtuellen Speichers auf weniger als 55 MB zu beschränken, und jetzt wird node.js mit einem malloc-Fehler beendet. Irgendwelche Vorschläge? – Mike

+0

Hallo Mike. Wie hast du das gelöst? – Industrial

Antwort

1

Sie können softlimit verwenden, um den Knoten mit begrenzter Größe auszuführen. Oder Sie können setrlimit von Linux direkt verwenden, aber nicht wirklich sicher, wie man es von NodeJS anruft, sehen Sie this SO question

+0

Danke. Ich habe setrlimit() gefunden, es benutzt, um ein Plugin für node.js zu schreiben, und es funktioniert - aber jetzt bekomme ich eine Fehlermeldung von node.js, dass malloc() fehlschlägt, weil es nicht so viel Speicher reservieren kann (55 MB) wie es will. Ein sehr undeutlicher Umgang mit einem Mangel an Speicher, so scheint es. Jetzt versuche ich herauszufinden, ob ich node.js wiederherstellen kann und etwas weglassen, um den Speicherbedarf zu reduzieren. Irgendwelche Ideen? – Mike