Почти все они обещают мне x-MB RAM и y-MB динамически.
Я программист, но не понимаю, как они решают, какой процесс нужно убить, если я выделяю память и храню ее так долго, что им это нужно. Я имею в виду, допустим, экземпляр сервера php-fcgi работает до 500 МБ, у меня нет проблем с его уничтожением, но они не должны убивать мой mysqld или lighttpd, который запускается только во время загрузки.
Я не смог найти ничего в FAQ или в форме поддержки нескольких проверенных мной провайдеров.
Процессы, потребляющие слишком много оперативной памяти под Linux, обычно прекращаются ядром oom-killer
обработать. OOM расшифровывается как "Out Of Memory". Вы можете прочитать описание процесса принятия решения Вот и как повлиять на его поведение Вот.
Я никогда не использовал OpenVZ или Virtuozzo, но я это понимаю так:
Расширяемая оперативная память - это «особенность» Virtuozzo и его аналога с открытым исходным кодом OpenVZ. На этих ящиках отдельные VPS фактически не имеют своих собственных ядер. В соответствии с этими технологиями каждый VPS имеет два ограничения в ядре хоста: privvmpages и oomguarpages.
Privvmpages устанавливается равным общему объему пакетной + гарантированной оперативной памяти, и процессам в VPS разрешено выделять до этого объема памяти. Когда на хосте заканчивается ОЗУ, он начинает убивать процессы на всех VPS, которые выделили ОЗУ больше, чем oomgaurdpages. Если вспомнить, что все процессы VPS на хосте работают в одном ядре, это немного легче понять.
Я понятия не имею, как убийца OpenVZ / Virtuozzo OOM принимает решения о том, какие процессы убивать. Если бы я разрабатывал его, я бы, вероятно, выбрал VPS с наибольшим количеством страниц, превышающих oomgaurpages, а затем выбрал бы процесс в этом VPS на основе оценки, рассчитанной на основе возраста и размера процесса, промыть, повторить. Хотя, как я уже сказал, я не знаю, как они на самом деле это делают.
Важно отметить, что в обычной системе Linux процесс может быть нарушен больше, чем общий объем подкачки + RAM, который существует без проблем. Когда вы идете использовать его, вас останавливают. В OpenVZ / Virtuozzo malloc завершится ошибкой. На самом деле это довольно часто встречается в вещах, которые обычно имеют много повторяющихся выделений / освобождений, когда процесс сам хочет управлять своей памятью. Специализированный диспетчер памяти в таком процессе может иметь гораздо большую производительность.
Обычно с такими жесткими ограничениями завершается процесс, превышающий лимит.