Выделенный сервер · помесячно

Два совпадения
Дальше выбирайте память

$465 / месяц · 128 ГБ
Начать аренду
32 ядра / 64 потока DDR4 ECC

Когда облачную машину пора сменять на целиком свою

Запросы «выделенный сервер или облако», «bare metal и облачный сервер», «VPS или выделенный» спрашивают одно: есть ли в планировщике кто-то ещё. Пока три строки тихие, машина остаётся в облаке. Аренду целиком считают, когда на рабочем пике два совпадения держатся несколько дней: steal, рабочий набор упёрся в потолок памяти, очередь диска держит commit.

Сначала столбцы, которые вы уже умеете снимать

Решение начинается не с названия тарифа, а с двух команд на той машине, которая уже работает. Интервал — 1 или 10 секунд, окно — рабочий пик, не ночной бэкап. Нужны хотя бы пять рабочих дней.

vmstat 1
iostat -xz 1

В vmstat столбец us — пользовательское время, sy — система, id — простой, wa — ожидание диска, st — steal. si и so — подкачка туда и обратно. В iostat -xz для диска с данными смотрите aqu-sz (средняя длина очереди) и w_await (ожидание записи). Рядом положите p95 того же окна и время commit из медленного журнала. На контейнерном VPS столбца st нет. Возьмите прирост nr_throttled и throttled_usec из cpu.stat контроллера CPU. Без этой колонки вывод по процессору не делайте.

Правило на неделю

Две строки совпали с p95 на пике несколько рабочих дней — ставьте аренду рядом со счётом облака. Одна строка — увеличьте ВМ и снимите то же окно на следующей неделе. Всплеск в несколько секунд облако не покидает.

Чем облако, VPS и выделенный отличаются в этих столбцах

Облачный сервер чаще всего гостевая KVM. На хосте есть другие арендаторы. Гость видит steal: vCPU уже мог считаться, а время отдали соседу. Диск часто сетевой том, IOPS идут по тарифу или по кредитам. У памяти есть потолок. Balloon забирает у гостя страницы, которые тот сейчас не трогает. Выделенный сервер и облачный в этих трёх столбцах расходятся тем, есть ли там чужой арендатор.

VPS сначала делите на виртуалку и контейнер. Виртуалка читается как облако, только потолок обычно ниже. Контейнер душится квотой: растущий nr_throttled на пике — квота кончилась, это не «сервер сломался». Квота уже на потолке тарифа, а троттлинг остаётся — тот же вывод, что и по steal. VPS всё ещё доля чужого хоста. Выделенный сервер, в этой заметке он же bare metal, отдаёт планировщик одному заказчику. В ОС хоста steal должен быть около нуля. Диски — NVMe в этом корпусе. Память — планки этой машины, объём фиксируют в заказе.

Сосед виден в steal

Steal — время, когда гость хотел работать, а процессор держал гипервизор. В Prometheus это rate node_cpu_seconds_total в режиме steal, затем среднее по ядрам. Несколько секунд — короткий всплеск соседа. Облако остаётся. Строка, которая считается: steal несколько раз доходит примерно до 10 % и выше, держится минуты, ваши us и sy этого не объясняют, p95 API идёт туда же. Добавлять vCPU на уже плотном хосте часто значит удлинить очередь.

Другой пик отложите отдельно. us плюс sy почти полные, steal около нуля: ядра кончились у вас. Сначала поднимите CPU в облаке. Если после этого steal в те же рабочие часы возвращается, упёрлись в хост. Линия около 10 % — чтобы читать график, не норматив аварии. Жёсткий бюджет задержки — линия ниже. Пакет, который может подождать, — выше. Держатся вместе несколько рабочих дней и p95 в ту же сторону.

st steal в vmstat
~10 % линия чтения пика
5 дней рабочих дней минимум
p95 идёт вместе со steal

На хостовой системе своей машины steal должен сесть около нуля: в очереди нет другого заказчика. Если сверху вы поднимете свои виртуалки, у них steal снова появится. Это делёж ваших 32 ядер.

Рабочий набор упёрся в потолок памяти

Рабочий набор — страницы, которые нагрузка в этом окне трогает снова и снова. Linux отдаёт свободную память под кэш. Низкий MemAvailable при ровной задержке — обычно кэш. График «память 90 %» сам по себе слабый повод переезжать.

Строку записывайте, когда на рабочих часах вместе: si и so не возвращаются к нулю, major fault растёт вместе с задержкой базы, в журнале ядра есть OOM, нужный буферный пул уже больше памяти этой ВМ, а в линейке провайдера нет следующей ступени, которую вам можно взять. Balloon давит гостя, который по процессам ещё не полон: хост забрал страницы. Сначала отделите balloon от рабочего набора.

Набор около 32 ГБ, без swap и без OOM, закрывается более крупной облачной памятью. Когда набор уже на максимуме, который это облако продаёт, остаются две фиксированные ступени своей машины: 128 ГБ или 256 ГБ DDR4-3200 ECC RDIMM. После заказа планку не добавляют. Считайте от пика плюс запас на систему и страничный кэш. В 128 ГБ не входит — берите 256 ГБ за $592 в месяц. Не входит ни туда, ни туда — эта машина тоже не удержит.

Кэш и подкачка

Мало свободной памяти и ровная задержка — это кэш. Подкачка или OOM в рабочие часы, либо пул больше потолка ВМ — это строка про память.

Очередь диска держит commit

Когда база медленная, сначала очередь диска с данными, потом сетевая карта. OLTP смотрит на fsync в момент commit. Последовательные мегабайты ночного бэкапа дневной commit не объясняют.

На пике aqu-sz диска с данными часто больше 1, w_await уходит в десятки миллисекунд, время commit в медленном журнале растёт вместе с ними: очередь держит базу. Пропускная способность в МБ/с при этом может оставаться скромной. У сетевого тома сверху лежат кредиты IOPS. Кредиты кончились — ожидание прыгает и через несколько часов отпускает. Каждый день тот же час, перезапуск приложения ничего не меняет. Верхний тариф IOPS уже куплен, а ожидание повторяется по рабочим дням: предел в общем хранилище.

Ночью диск забит бэкапом, днём w_await обычный — сдвиньте окно копирования. Ожидание низкое, а медленные запросы — это блокировки или полный просмотр: правьте SQL. На NVMe %util около 100 % сам по себе про насыщение говорит плохо. После переезда оставьте длину очереди и ожидание записи.

На пике Остаться в облаке Считать свою машину
Steal прыгает секунды, p95 стоит Размер не трогать Строка не держится
Steal около 10 % и выше минутами, p95 туда же, лишние vCPU это не снимают Увеличение уже пробовали Сосед держит ядра
us+sy полные, steal около нуля Поднять CPU в облаке Пока не переезжать
Троттлинг контейнера растёт, квота уже максимальная Тот же вывод, что по steal Квота кончилась, троттлинг остался
Свободной памяти мало, подкачки нет, задержка ровная Читать как кэш Строка не держится
Подкачка или OOM, пул больше памяти ВМ Крупнее памяти в облаке нет 128 или 256 ГБ по рабочему набору
Диск занят только в окне бэкапа Сдвинуть бэкап Строка не держится
Очередь диска с данными часто больше 1, запись — десятки мс, commit медленный, IOPS уже верхние Тип тома уже меняли Очередь — общее хранилище

Если задержка в основном из расстояния до площадки, steal можно убрать, а путь останется. Серверы стоят в Токио, Япония. Путь в Японию и путь в далёкий регион — разные задачи. Блокировки, отсутствующие индексы и вызовы через регионы в эти три строки не входят.

Как свести неделю и куда сядут кривые на своей машине

  1. 1
    Пять рабочих пиков

    Оставьте us, sy, st, si, so и p95 того же окна. Час бэкапа храните отдельно.

  2. 2
    Кэш или набор

    MemAvailable рядом с буферным пулом и фактическим пиком. Строку OOM из журнала ядра сохраните. На контейнере прочитайте лимит памяти.

  3. 3
    Только диск с данными

    aqu-sz и w_await этого диска рядом с commit. Системный диск и диск бэкапа в эту строку не кладите.

  4. 4
    Три строки

    На каждую: есть или нет, какие дни, шёл ли p95 туда же. Два «есть» — страница сборки. Одно «есть» — правка тарифа в облаке и повтор через неделю.

Когда два совпадения держатся, проверьте, примет ли их железо. Процессор — один AMD EPYC 7543P, 32 ядра / 64 потока, 2,8–3,7 ГГц. Им пользуется один заказчик. В ОС хоста steal должен быть около нуля. Steal ваших собственных гостей показывает только, как вы делите эти 32 ядра.

Память: 128 ГБ за $465 в месяц или 256 ГБ за $592, обе DDR4-3200 ECC RDIMM. Берите по пиковому рабочему набору. Набор ясно входит в 128 ГБ — берите 128 ГБ.

Диски по умолчанию: 2 × 1 ТБ NVMe, без аппаратного RAID, каждый диск подключён напрямую. Полезный объём читайте как 2 ТБ. Очередь с сетевого тома после перехода на локальный NVMe обычно сначала падает. Не падает — смотрите SQL или нехватку одного диска. Можно добавить до двух дисков по 2 ТБ, каждый по $83 в месяц, тоже напрямую. Сами в массив они не входят. Программный RAID ради избыточности возвращает полезный объём примерно к 1 ТБ. Копии держите вне машины.

Канал по умолчанию 250 Мбит/с, трафик не тарифицируется. Очередь диска — это ожидание хранилища. На 1 Гбит/с (+$251 в месяц) или 2 Гбит/с (+$749) поднимайтесь, когда забит сам порт 250 Мбит/с, а не потому что медленный fsync. Один IPv4 уже входит. Дополнительные адреса — по $2 в месяц за штуку, на сервере всего до 256, по одному, без продажи подсетью. Систему можно взять Ubuntu 24.04. Windows Server Standard добавляет $21 в месяц, Datacenter — $27. Linux по SSH, Windows по RDP.

Месячная сумма — цена машины плюс число дисков, умноженное на 83, плюс шаг канала, плюс число дополнительных IPv4, умноженное на 2, плюс система. К оплате — эта месячная сумма, умноженная на число месяцев. Месяц, квартал, полгода и год считаются этим произведением. Платы за установку нет. Серверы стоят в Токио, Япония. Если совпала только очередь диска, а процессор и память тихие, сначала доведите облачный том до верхнего тарифа и только потом сравнивайте с машиной от $465 в месяц. Лёгкий набор и короткая очередь обычно дешевле остаются на ВМ. Когда совпали две строки, откройте страницу сборки и выберите 128 или 256 ГБ.

Выделенный сервер · помесячно

Строки совпали. На сборке выберите память.

128 или 256 ГБ. Диски — 2×1 ТБ, напрямую. Заказ проходит и без входа.

$465 / месяц
CPUEPYC 7543P
Ядра32 ядра / 64 потока
Память128 / 256 ГБ ECC
Диски2×1 ТБ напрямую
ПлощадкаТокио, Япония
ДоступSSH / RDP
УстановкаБез платы