2012-06-20 10 views
9

Zgodnie z filozofią Erlanga "zawieść", można się spodziewać, że cała maszyna wirtualna nie ulegnie awarii, jeśli proces nie może przydzielić pamięci potrzebnej do wykonania operacji; w rzeczy samej, jeśli system ma heurystykę, aby zabić jakiś proces, aby zwolnić trochę pamięci, jakiś inny proces poradzi sobie z tym i odzyska. Nadzorcy root prawdopodobnie nie zostaną zabici przez heurystykę.Jak zabraknie pamięci w Erlangu?

Jest to w przeciwieństwie do większości współczesnych popularnych języków, które po prostu giną lub pozwalają OS wybrać, co robić.

Jak zabraknie pamięci rzeczywiście obsługiwane w Erlang?

+0

Zobacz też: [Dlaczego Erlang zawiesza się na dużych sekwencjach?] (Http://stackoverflow.com/questions/192725/why-is-erlang-crashing-on-large-sequences) –

Odpowiedz

11

Gdy maszyna wirtualna Erlang działa w sytuacji braku pamięci, po prostu powoduje awarię całej maszyny wirtualnej. Powodem jest to, że jest to najprostsza i najbezpieczniejsza rzecz.

Jeśli potrzebujesz systemu odpornego na awarie, musisz mieć już więcej niż jeden komputer. Nie można stworzyć systemu odpornego na awarie tylko z jednym komputerem (precyzyjnie autonomiczna jednostka obliczeniowa). Jeśli więc twoja aplikacja działa w sytuacji braku pamięci, najprościej jest pozwolić na awarię całej maszyny wirtualnej. W każdym razie masz błąd w swoim systemie.

Obsługa wszystkich skrzynek brzegowych - których brak pamięci można obsłużyć, a których nie można - jest zbyt skomplikowana i podatna na błędy. Zabicie obraźliwego procesu nie jest rozwiązaniem. Po pierwsze, który jest procesem obrażającym, trudno jest zdecydować. Zabicie jakiegoś "przypadkowego" (heurystycznie zdecydowanego) procesu nie jest ani rozwiązaniem, ponieważ ten proces zabity przez heurystykę może być procesem odpowiedzialnym za odzyskanie przez przypadek. Zabicie całej maszyny wirtualnej jest nie tylko najprostszym, ale także jedynym rozsądnym rozwiązaniem sytuacji braku pamięci.

Sposób, w jaki jest to wykonywane w większości nowoczesnych popularnych języków lub systemów operacyjnych, jest zdecydowanie niewłaściwy w sytuacjach, w których potrzebne są niezawodne systemy. Może być akceptowalny dla komputerów stacjonarnych lub mniej rygorystycznych wymagań, ale absolutnie nie do przyjęcia dla systemów, dla których przeznaczony jest Erlang.

+0

co jeśli oba vms na obu zabrakło pamięci na komputer ze względu na nadmiarową aplikację? –

+0

Muzaaya, co masz na myśli przez "zbędny wniosek"? –

+0

@MuzaayaJoshua: Sądzisz, że psujesz wysoką niezawodność dzięki wysokiej dostępności. Oba rozwiązania są odporne na awarie. Wysocy dostępni muszą pracować non stop. Wysoce niezawodne muszą działać poprawnie, tzn. Bez błędów, ale mogą się przypadkowo zatrzymać. Aplikacje nadmiarowe są używane do tworzenia wysoce niezawodnych aplikacji. Wysoko dostępne są tworzone z kopii zapasowych. Oznacza to, że przygotowana jest "redundantna" aplikacja, która nie uruchamia aplikacji, a jedynie aktualizuje jej stan. Aplikacja do tworzenia kopii zapasowych nie powinna być uruchamiana w głównej sytuacji. W każdym razie zawieszenie jest słuszne w obu sytuacjach. –

Powiązane problemy