2012-06-20 4 views
9

Erlang의 "let it crash"철학을 사용하면 프로세스가 작업을 진행하는 데 필요한 메모리를 할당 할 수없는 경우 전체 VM이 충돌하지 않을 것이라고 기대할 수 있습니다. 실제로 시스템에 메모리를 확보하기 위해 일부 프로세스를 죽이는 경험적 방법이 있다면 다른 프로세스가이를 처리하고 복구 할 것입니다. 루트 수퍼바이저는 아마도 휴리스틱에 의해 죽지 않을 것입니다.Erlang에서 메모리 부족 문제는 어떻게 처리됩니까?

이것은 죽거나 OS가 무엇을할지 선택하게하는 대부분의 현대 대중 언어와 직접적인 대조를 이룹니다.

메모리가 부족합니다. 실제로 얼랭으로 처리되는은 무엇입니까?

+0

다음을 참조하십시오 : [큰 시퀀스에서 Erlang이 왜 충돌합니까?] (http://stackoverflow.com/questions/192725/why-is-erlang-crashing-on-large-sequences) –

답변

11

Erlang VM은 메모리 부족 상황에서 실행될 때 단순히 전체 VM을 손상시킵니다. 그 이유는 가장 간단하고 안전한 일입니다.

내결함성이있는 시스템을 원한다면 이미 하나 이상의 컴퓨터가 있어야합니다. 하나의 컴퓨터 (자율 계산 단위로 정확하게)로 내결함성 시스템을 만들 수는 없습니다. 따라서 응용 프로그램이 메모리 부족 상황에서 실행되는 경우 가장 간단한 방법은 전체 VM을 중단시키는 것입니다. 어쨌든 시스템에 버그가 있습니다.

처리 할 수있는 메모리와 처리 할 수없는 모든 엣지 케이스를 처리하는 것은 너무 복잡하고 오류가 발생하기 쉽습니다. 기분을 상하게하는 과정을 죽이는 것이 해결책이 아닙니다. 첫째, 기분을 상하게하는 과정은 결정하기 어렵습니다. "임의의"(경험적으로 결정된) 프로세스를 죽이는 것은 해결책이 아닙니다. 왜냐하면이 프로세스가 경험적으로 죽인 것은 실수로 복구하는 프로세스가 될 수 있기 때문입니다. 전체 VM을 죽이는 것은 메모리 부족 상황에 대한 유일한 해결책 일뿐만 아니라 합리적인 솔루션입니다.

신뢰할 수있는 시스템이 필요한 상황에서는 대부분의 대중적인 언어 또는 OS에서 수행되는 방식이 확실히 잘못되었습니다. Erlang이 설계된 시스템에서는 데스크탑이나 덜 엄격한 요구 사항은 수용 가능하지만 절대적으로 받아 들일 수 없습니다.

+0

두 경우 모두 vms 중복 응용 프로그램으로 인해 컴퓨터의 메모리가 부족합니다. –

+0

Muzaaya, "중복 신청"이란 무엇입니까? –

+0

@MuzaayaJoshua : 고 가용성으로 높은 안정성을 엉망으로 만들고 있다고 생각합니다. 둘 다 결함 허용 솔루션입니다. 고가의 것들은 논스톱으로 일해야합니다. 높은 신뢰도를 가진 것들은 버그없이 제대로 작동해야하지만 실수로 멈출 수 있습니다. 중복 응용 프로그램은 신뢰할 수있는 응용 프로그램을 만드는 데 사용됩니다. 사용 가능한 고 가용성 백업은 백업으로 만들어집니다. 즉, 응용 프로그램을 실행하지 않고 상태 만 업데이트하는 "중복"응용 프로그램이 준비되었음을 의미합니다. 백업 애플리케이션은 주된 상황으로 실행되지 않아야합니다. 어쨌든 충돌은 두 상황 모두에서 맞습니다. –