2012-05-25 11 views
6

Pracuję w środowisku osadzonym, w którym zasoby są dość ograniczone. Staramy się używać node.js, który działa dobrze, ale zazwyczaj zużywa około 60 megabajtów pamięci wirtualnej (używana pamięć rzeczywista to około 5 megabajtów.) Biorąc pod uwagę nasze ograniczenia, jest to za dużo pamięci wirtualnej; możemy pozwolić sobie tylko na to, aby plik node.js mógł używać co najwyżej 30 megabajtów maszyny wirtualnej.Jak ograniczyć wykorzystanie pamięci wirtualnej przez plik node.js?

Istnieje kilka opcji wiersza polecenia dla node.js, takie jak „--max_old_space_size” „--max_executable_size” i „--max_new_space_size”, ale po doświadczeniach uważam, że to wszystko kontrolować rzeczywistą pamięć użycie, a nie maksymalny rozmiar pamięci wirtualnej.

Jeśli to ma znaczenie, pracuję w wariancie Ubuntu linux na architekturze ARM.

Czy istnieje opcja lub ustawienie, które pozwoli ustawić maksymalną ilość pamięci wirtualnej, której może używać proces node.js?

+0

. Dlaczego miałby to być problem? Linux używa nadmiernej alokacji: Ta wirtualna pamięć będzie istnieć tylko jako wpisy w tabeli stron procesu, dopóki nie zostanie * dokładnie * wykorzystana. –

+0

Hm. Nie jestem pewny. Jest to środowisko osadzone (co oznacza: brak miejsca na dysku), więc czy nie wszystkie wirtualne alokacje zużywałyby trochę prawdziwej pamięci? Przedstawię tę myśl mojemu szefowi, ale mam wrażenie, że to nie sprawi żadnej różnicy; Kazano mi zredukować ślad i kłócić się, że nie powinienem był nie mieć zbyt dużego ciężaru. "Klient ma zawsze rację". Poza tym natknąłem się na inny problem; Napisałem funkcję przy użyciu setrlimit(), aby ograniczyć użycie pamięci wirtualnej do mniej niż 55 megabajtów, a teraz plik node.js kończy działanie z błędem malloc. Jakieś sugestie? – Mike

+0

Cześć Mike. Jak to rozwiązałeś? – Industrial

Odpowiedz

1

Możesz użyć softlimit, aby uruchomić węzeł o ograniczonym rozmiarze. Lub możesz bezpośrednio użyć Linuksa, ale nie wiesz, jak go wywołać z NodeJS, zobacz this SO question

+0

Dzięki. Znalazłem setrlimit(), użyłem go do napisania wtyczki dla node.js, i działa - ale teraz dostaję komunikat o błędzie z node.js, że malloc() nie działa, ponieważ nie może przydzielić tyle pamięci (55 megs), jak chce. Wydaje się, że był to bardzo nieprzyjemny sposób radzenia sobie z brakiem pamięci. Tak więc teraz próbuję dowiedzieć się, czy mogę odbudować node.js i pominąć coś, aby zmniejszyć ślad pamięci. Jakieś pomysły? – Mike

Powiązane problemy