Когда говорят «подберите VPS», чаще всего подразумевают магию: назовите сайт, и вам предложат «2 ядра и 4 ГБ». В жизни это не работает. Конфигурация виртуального сервера должна вытекать из измеряемой нагрузки, требований к задержкам и того, как именно ваше приложение расходует ресурсы.

Если вы подбираете площадку, где можно быстро развернуть тестовый виртуальный сервер и поэкспериментировать с конфигурациями, удобно использовать любой провайдер с понятным биллингом и быстрым пересозданием. Например, сервер можно заказать на VPS.house и использовать его как «стенд» для замеров и нагрузочных прогонов, не превращая выбор тарифа в лотерею.
В этой статье не будем пересказывать универсальные мантры «берите с запасом» и «смотрите на IOPS». Вместо этого разберем инженерный подход: какие вопросы задать, какие метрики снять, как интерпретировать результаты, почему средние значения обманывают и как выбрать конфигурацию так, чтобы она соответствовала реальной нагрузке, а не ожиданиям.
- С чего начинается правильный выбор: не с CPU, а с целей
До выбора ядер и гигабайтов нужно определить две вещи:
- Что считается успехом для сервиса
Это обычно формулируется как SLO или SLA на прикладном языке: «страница открывается за N секунд», «API отвечает не дольше M мс в p95», «RDP сессии не лагуют при 20 пользователях», «отчет формируется за 2 минуты» - Как измеряется нагрузка
Нагрузка – это не «посетители в день». Для сервера важнее:- запросы в секунду (RPS) и их типы
- конкурентность (сколько запросов одновременно в работе)
- размер рабочих наборов данных (working set)
- характер дисковых операций (много мелких чтений, редкие большие записи, fsync, журналирование)
- сетевой профиль (много мелких пакетов, большие ответы, постоянные соединения, WebSocket)
Одна из самых полезных формул в этой теме – закон Литтла из теории очередей: L = λW, где L – среднее число запросов «в системе», λ – интенсивность (RPS), W – среднее время обработки. Практический смысл простой: если время ответа растет, то при том же потоке запросов растет и количество одновременных запросов, а значит давление на CPU, память и очереди ввода-вывода. Поэтому «на глаз» по CPU выбрать нельзя – важно понимать задержки и конкурентность.
Почему «средняя нагрузка» почти всегда вводит в заблуждение
Администраторы любят средние значения: средняя загрузка CPU, средняя латентность, средний RPS. Проблема в том, что пользователи ощущают хвост распределения – p95, p99, пики и деградации, а не «среднюю температуру»
Типичный сценарий:
- в среднем CPU 30%
- но раз в минуту или при бэкапе база делает всплеск I/O
- время ответа растет
- очередь запросов увеличивается
- сервис начинает «сыпаться», хотя «по среднему CPU все нормально»
Поэтому для выбора конфигурации нам нужны не только средние значения, а:
- p95 и p99 времени ответа ключевых операций
- пики по CPU, памяти, диску и сети
- время ожидания диска (iowait) и очереди (queue depth)
- признаки давления памяти (page faults, своп, reclaimed cache)
- утилизация одного ядра (single-thread bottleneck), если это важно
Сбор исходных данных: что нужно измерить до выбора тарифа
Идеально – если у вас уже есть прод, и вы снимаете метрики. Но часто прод еще не создан, или он на другом хостинге. Тогда работа идет в два этапа: прогноз и эксперимент
Минимальный набор, который стоит подготовить:
- список сервисов и версий (nginx, php-fpm, node, postgres, redis, java, rabbitmq, …)
- профиль запросов: 3-5 самых тяжелых эндпоинтов или операций
- целевая аудитория и рост: «сейчас 50k визитов в сутки, рост 20% в квартал» – это не точность, но ориентир
- требования к задержкам: что является «нормально», а что «плохо»
- ограничения по бюджету и по масштабированию (можем ли мы горизонтально масштабироваться или только вертикально)
Если данных нет вообще, начинайте с грубой модели и подтверждайте ее тестами.
- CPU: ядра, частота и «неочевидные» ограничения
CPU для VPS – это не просто «сколько ядер». В реальности важны три вещи:
- Однопоточная производительность
Многие операции упираются в один поток: часть логики приложения, один воркер, один процесс, один запрос, один поток интерпретатора. У вас может быть 16 vCPU, но один «тяжелый» поток будет упираться в производительность одного ядра - Конкурентность
Если приложение хорошо параллелится (например, множество независимых запросов), добавление ядер действительно увеличит пропускную способность. Если нет – вы будете платить за «пустые» ядра - «Соседи» и гарантии
На виртуализации возможны ситуации, когда CPU вроде бы есть, но время выполнения скачет из-за распределения ресурсов. В таких случаях полезно смотреть не только на CPU usage, но и на задержки приложения и время ожидания выполнения (в разных системах это выражается по-разному). Если провайдер декларирует гарантированные ресурсы без оверселинга, это снижает риск внезапных просадок в пике
Практика выбора CPU:
- если сервис вебовый, начните с оценки RPS на одно ядро в ваших условиях и на вашем стеке (не «в среднем по интернету»)
- прогоните нагрузочный тест (k6, wrk, vegeta) и снимите p95
- увеличьте ядра и проверьте, масштабируется ли RPS и падают ли хвосты
Если прироста нет – вы уперлись не в CPU
Важно: нагрузочный тест должен повторять реальный профиль запросов. «Один GET /» почти ничего не говорит про реальный WordPress, CRM или API.
Память: почему «еще 2 ГБ» иногда ускоряют больше, чем ядро
RAM на VPS ценится не только как место для процессов. В Linux огромную роль играет page cache – кэш файловой системы. Он может радикально уменьшить число обращений к диску и улучшить p95 задержек.
Ключевой вопрос: каков рабочий набор данных
- для базы данных это часто горячие индексы и часто читаемые страницы таблиц
- для веба – кеши приложений, opcode cache, in-memory sessions
- для очередей и брокеров – буферы и persistent state
Признаки нехватки памяти:
- рост major page faults
- частые GC паузы (для JVM, Node, Python в некоторых сценариях)
- своп и резкий рост latency под нагрузкой
- падение кэшей и рост дисковых чтений
Практический прием: нагрузочный прогон на тестовом VPS с мониторингом
Если под стабильной нагрузкой p95 растет со временем, а память «поджимается», это часто признак того, что рабочий набор не помещается в RAM и система начинает постоянно дергать диск.
Диск: важнее латентность и стабильность, чем «гигабайты в секунду»
Маркетинговые цифры «до 10 ГБ/с» сами по себе мало что дают. Для большинства прикладных задач важнее:
- латентность операций чтения и записи
- стабильность в пике (нет ли резких провалов)
- поведение при fsync и журналировании
- количество мелких операций (IOPS), но с оговоркой – IOPS без латентности мало информативны
Примеры, где диск критичен:
- базы данных с частыми коммитами и fsync
- очереди, которые пишут на диск
- почтовые системы
- логирование в больших объемах
- проекты с большим количеством мелких файлов
Правильный подход к диску:
- разделяйте «объем» и «производительность»
- тестируйте диск в той файловой системе и с теми параметрами, которые будут в проде
- измеряйте не только «пропускную способность», но и p95 задержки I/O
Инструменты для тестов: fio для диска, pgbench для PostgreSQL, sysbench для общего профиля. Но любые синтетические тесты нужно интерпретировать осторожно – реальная нагрузка может быть другой.
Сеть: скорость, задержка, соединения и «неочевидные лимиты»
Сеть на VPS редко упирается в «скорость канала» в чистом виде. Чаще проблемы появляются из-за:
- большого числа одновременных соединений
- мелких пакетов и высокой частоты запросов
- TLS рукопожатий (особенно без keep-alive)
- ограничений на уровне приложения или ОС (лимиты файловых дескрипторов, backlog, conntrack)
Если у провайдера заявлен трафик без ограничений на скорости (например, 250 Мбит/с), это снимает один класс вопросов, но все равно нужно проверять реальный профиль: сколько соединений держит сервис, как работает keep-alive, где ваша точка перегиба по p95.
Простая методика выбора конфигурации: «модель – тест – уточнение»
Вместо гадания предлагаю практический цикл из 6 шагов
Шаг 1. Опишите ключевую операцию
Например: «пользователь открывает каталог и фильтрует товары», «клиент делает запрос к API», «оператор работает по RDP».
Шаг 2. Задайте SLO
Например: «p95 ответа не хуже 400 мс при 200 RPS» или «RDP без фризов при 15 сессиях».
Шаг 3. Соберите профиль нагрузки
- типы запросов и их доли
- средний и пиковый RPS
- размер ответов
- сценарии, которые нагружают базу
Шаг 4. Возьмите стартовую конфигурацию, но осмысленно
Не берите «минималку» если вы уже знаете, что у вас тяжелая база или много воркеров. Но и не прыгайте в 16 vCPU без доказательств.
Шаг 5. Нагрузочный прогон с наблюдаемостью
Вам нужны метрики CPU, RAM, disk latency, network, плюс метрики приложения (latency p95, error rate). Без метрик выбор превращается в спор мнений.
Шаг 6. Меняйте один параметр и повторяйте
Добавили RAM – смотрите, ушли ли пики I/O и хвосты latency.
Добавили ядра – смотрите, вырос ли RPS без роста p95.
Ускорили диск – смотрите, уменьшились ли задержки базы.
Этот подход особенно удобен там, где можно менять конфигурацию без бюрократии и платить по факту использования. В этом смысле полезна модель, когда «смена конфигурации возможна сколько угодно раз с перерасчетом по секундам» – вы тратите деньги на измерение, а не на догадки.
«Конфигурационные шаблоны» под типовые сценарии, но без мифологии
Я сознательно не дам здесь цифры «для WordPress нужно X». Это почти всегда неправда, потому что WordPress бывает пустой, а бывает с тяжелыми плагинами, поиском, очередями и внешними API. Но можно дать логические ориентиры
Сценарий A: небольшой сайт или лендинг
Бутылочные горлышки обычно: TLS, php-fpm воркеры, база на диске.
Тактика: достаточно базового CPU, но следите за RAM, чтобы кэш и база не уходили в диск. Диск по латентности важнее «скорости в гигабайтах».
Сценарий B: API и микросервисы
Бутылочные горлышки: CPU на сериализацию, количество соединений, хвосты latency.
Тактика: тестируйте p95, следите за лимитами OS (ulimit, backlog). Добавление ядер помогает только если сервис параллелится.
Сценарий C: база данных на VPS
Бутылочные горлышки: дисковая латентность, fsync, память под буферы и кэш.
Тактика: сначала стабилизируйте диск и RAM, потом CPU. Хорошо измеряется pgbench или нагрузкой вашего приложения.
Сценарий D: удаленный рабочий стол и Windows
Запросы «vps windows» и «vds windows» обычно приходят от людей, которым важны RDP, совместимость со специфичным ПО и предсказуемость ресурсов.
Бутылочные горлышки: RAM (много сессий), CPU (UI и фоновые задачи), диск (обновления, профили, временные файлы).
Тактика: считать нужно по числу одновременных пользователей и профилю их задач. «Один бухгалтер и один дизайнер» – две разные вселенные по нагрузке.
Ошибки выбора, которые я вижу чаще всего
Ошибка 1. Выбирать по «объему посетителей»
10 тысяч визитов в сутки могут дать 2 RPS, а могут дать 200 RPS в пике. Решает распределение по времени и тяжелые операции
Ошибка 2. Игнорировать хвосты
Сервис «в среднем быстрый», но в p95 медленный – и пользователи считают его медленным. Выбирайте по p95, а иногда и по p99 для критичных систем.
Ошибка 3. Путать «быстро на тесте» и «стабильно в проде»
Синтетический тест без базы и без реальных данных редко отражает жизнь. Важны реальные данные, реальные индексы, реальный размер кэша.
Ошибка 4. Не закладывать резерв на рост и фоновые задачи
Бэкапы, обновления, пересчет индексов, отчеты, крон – это реальная нагрузка. Планируйте headroom. Не «в 2 раза на всякий случай», а осмысленно, исходя из графика и критичности.
Ошибка 5. Не уметь восстановить конфигурацию и повторить эксперимент
Если вы не можете повторить тест и получить похожий результат, значит измерение было неуправляемым. Фиксируйте версии, параметры, сценарии теста.
- Как провести «разумный» тест за один день и не утонуть
Если цель – быстро выбрать конфигурацию под старт, полезен короткий план: - Поднять тестовый виртуальный сервер на сутки
Такая аренда удобна, если провайдер позволяет взять VPS на 1 день и платить только за фактическое время – это снижает порог для экспериментов - Развернуть приложение и данные, максимально близкие к реальности
Минимально – дамп базы, реальные конфиги, реальные зависимости - Настроить мониторинг
Даже базовый набор: CPU, RAM, диск (latency), сеть, плюс метрики приложения - Прогнать 2-3 сценария нагрузки
- базовый рабочий поток
- пиковый поток (короткое окно)
- поток с фоновыми задачами (бэкап, отчет, импорт)
- Снять p95 и error rate
Если p95 не держится, выяснить, что упирается: CPU, память, диск, лимиты. Далее изменить один параметр и повторить - Зафиксировать результат
Итогом должна быть не «кажется норм», а конкретная формулировка: «при 150 RPS p95 320 мс, CPU 55%, память 70%, диск p95 latency X, ошибок нет» плюс указание конфигурации - Вертикальное масштабирование: когда оно работает идеально
VPS хорош тем, что часто можно быстро увеличить ресурсы. Но важно понимать, в какой момент вертикальное масштабирование перестает помогать:- если вы упираетесь в один поток и однопоточную производительность
- если база становится узким местом из-за структуры данных и запросов
- если вам нужен отказоустойчивый кластер, а не «еще больше ресурсов»
Тем не менее для большинства проектов правильная стратегия выглядит так:
- стартовать с адекватной, но не чрезмерной конфигурации
- измерить и понять узкое место
- масштабировать ровно тот ресурс, который ограничивает SLO
- повторять цикл по мере роста
Практичная финализация: как выбрать без переплаты
Итоговый алгоритм в одном абзаце: выбирайте конфигурацию VPS не «по ощущениям», а по метрикам p95 и устойчивости под вашей моделью нагрузки. Сначала определите SLO, затем измерьте, куда уходит время, и масштабируйте точечно: CPU – если сервис реально CPU-bound, RAM – если рабочий набор не помещается и растут хвосты, диск – если латентность I/O бьет по базе и очередям, сеть – если вы упираетесь в соединения и задержки
Если вы на этапе подбора и хотите быстро перебрать несколько вариантов, удобно делать это там, где конфигурацию можно менять без пауз и сложных процедур. Как пример, при необходимости VPS/VDS можно арнедовать на VPS.house, поднята тестовая машина (в том числе в Москве, если важна география), а затем на основании измерений выбрать уже финальную конфигурацию под прод.
Главное – не воспринимать конфигурацию как раз и навсегда выбранный тариф. В нормальной инженерной картине это гипотеза, подтвержденная нагрузочным тестом и мониторингом. Именно так появляются быстрые и стабильные сервисы, а не «серверы, которые иногда почему-то тормозят».

17
~10 мин









