Как исчерпывается память в Erlang?

С философией Erlang "пусть это рушится" можно было бы ожидать, что вся ВМ не рухнет, если процесс не сможет выделить память, необходимую для продолжения своих операций; действительно, если бы в системе была эвристика для уничтожения какого-либо процесса для освобождения некоторой памяти, другой процесс справился бы с этим и восстановил бы. Корневые супервизоры, вероятно, вряд ли будут убиты эвристикой.

Это прямо противоположно большинству современных популярных языков, которые просто умирают или позволяют ОС выбирать, что делать.

Как нехватка памяти на самом деле обрабатывается в Erlang?

1 ответ

Решение

Когда Erlang VM работает в ситуации нехватки памяти, она просто сбивает всю VM. Причина в том, что это самая простая и безопасная вещь.

Если вам нужна отказоустойчивая система, у вас уже должно быть несколько компьютеров. Невозможно создать отказоустойчивую систему только с одним компьютером (точнее, с автономным вычислительным устройством). Так что, если ваше приложение работает в ситуации нехватки памяти, самое простое - позволить всей виртуальной машине вылететь. В любом случае, у вас есть ошибка в вашей системе.

Обработка всех крайних случаев - с какой нехваткой памяти вы можете справиться, а с какой - с другой - слишком сложна и подвержена ошибкам. Убить оскорбительный процесс не является решением. Во-первых, что является оскорбительным процессом, трудно решить. Уничтожение некоторого "случайного" (эвристически решенного) процесса не является решением, потому что этот процесс, убитый эвристикой, может быть процессом, ответственным за восстановление случайно. Убить всю виртуальную машину - это не только самое простое, но и единственно разумное решение проблемы нехватки памяти.

То, как это делается на большинстве современных популярных языков или ОС, определенно неправильно в ситуациях, когда вам нужны надежные системы. Это может быть приемлемо для настольных компьютеров или менее строгих требований, но абсолютно неприемлемо для систем, для которых предназначен Erlang.

Другие вопросы по тегам