Перейти к содержанию

Восемь команд, которые расскажут о новом VPS больше, чем карточка тарифа

Опубликовано
  • Админы
Восемь команд для приёмки нового VPS
Четыре обещания карточки тарифа и инструменты, которыми они проверяются

Карточка тарифа — это маркетинг. Вывод команды — это факт. Между ними обычно есть зазор, и узнать его размер удобнее всего в те первые часы, когда машина ещё пустая: нагрузки нет, измерения не искажены, а деньги при почасовой оплате или гарантии возврата пока можно забрать обратно. Потом на сервере появятся пользователи, и любые цифры начнут читаться как «ну, терпимо».

Собрал восемь проверок, которые закрывают четыре главных обещания любого VPS-тарифа: процессор, диск, канал и адрес. Всё, кроме fio, укладывается в считанные минуты.

⚠️ ОСТОРОЖНО

Порядок здесь принципиален: сначала замеры, потом установка чего бы то ни было. Запущенный в фоне Xray сам создаёт нагрузку — и в статистике процессора, и в выводе iperf3. Мерить сервер поверх собственного сервиса означает мерить собственный сервис.

Проверка, с которой всё начинается: а это точно виртуальная машина?

Под вывеской «VPS» продают две принципиально разные вещи. Одна — настоящая виртуалка со своим ядром. Вторая — контейнер, который делит ядро с соседями по хосту. Отличать их надо в первую очередь, потому что от ответа зависит, имеет ли смысл всё остальное.

systemd-detect-virt

Утилита печатает название технологии виртуализации; код возврата 0 означает, что виртуализация найдена, ненулевой — что машина железная. Ответ kvm — хорошо. Ответы lxc, lxc-libvirt, openvz, podman — вы в контейнере. Когда слои вложены друг в друга, показывается самый внутренний, а ключи --vm и --container позволяют посмотреть на конкретный уровень.

Сравнение возможностей KVM и контейнера
Схема по документации systemd-detect-virt и linuxcontainers.org

Разработчики LXC описывают задачу проекта так: «создать окружение, максимально близкое к обычной установке Linux, но без необходимости в отдельном ядре». Из отсутствия собственного ядра следует всё остальное. modprobe работать не будет. Ядерный WireGuard — а он живёт в mainline начиная с 5.6 — не поднимется. Сетевые sysctl либо доступны только на чтение, либо относятся ко всему хосту, и трогать их вам не позволят. Вывод nproc будет показывать процессоры физической машины, к которым вы отношения не имеете.

❗ ГЛАВНОЕ

Контейнер сам по себе не является мошенничеством. Как формат за пару долларов он честен и вполне годится под статический сайт, бота или зеркало репозитория. Проблема возникает тогда, когда машина покупалась под задачи, требующие модулей ядра, — и вот эту несостыковку стоит обнаружить в первый день, а не в тот момент, когда до запуска остаётся час.

Сразу же посмотрите на TUN — без этого устройства не заработает ни один туннель:

ls -l /dev/net/tun

Адрес достался вам не новым

Начну с самой дешёвой проверки, потому что она занимает минуту, а отменить покупку по её итогам иногда приходится. IPv4 выделен лично вам — но не выпущен из типографии сегодня. У адреса есть прошлое, и оно наследуется вместе с ним.

dig -x 203.0.113.10 +short
dig +short 10.113.0.203.zen.spamhaus.org

Первый запрос вытаскивает PTR-запись. Отсутствие записи или чужое имя от прежнего арендатора гарантируют, что исходящая почта осядет в спаме. Второй запрос адресован зоне Zen, куда адрес подставляется задом наперёд. NXDOMAIN, то есть пустой ответ, означает отсутствие в списках. Коды же расшифровываются так: 127.0.0.2 — SBL, 127.0.0.3 — CSS, 127.0.0.4 — XBL, а 127.0.0.10 и 127.0.0.11 — две разновидности PBL.

⚠️ ОСТОРОЖНО

Отдельно запомните код 127.255.255.254 — «запрос через публичный резолвер». Это не приговор адресу, а отказ в обслуживании: запросы, пришедшие через 8.8.8.8, 1.1.1.1 и им подобные, Spamhaus не обрабатывает. Спрашивать надо у резолвера хостера либо через веб-форму, иначе вывод получится ложным.

И последнее по адресу, но не по важности: убедитесь, что он вообще отвечает из той страны, ради которой сервер покупался. Для вас чистая подсеть и подсеть, где предыдущий сосед полгода собирал жалобы, выглядят одинаково — а для сети назначения нет. Внешний сервис вроде check-host.net закрывает этот вопрос за минуту, и эта минута отделяет спокойный возврат денег от полугода переписки с пользователями, у которых «не подключается».

«2 vCPU» — это доля, а не ядро

Виртуальный процессор не равен физическому: вам продаётся доля процессорного времени, которую распределяет гипервизор. Какую её часть у вас забирают, показывает счётчик steal.

vmstat 1 10

Man-страница определяет колонку st как «время, украденное у виртуальной машины», добавляя, что до ядра 2.6.11 оно попросту не учитывалось. Источник данных — восьмое поле строки cpu в /proc/stat; документация ядра называет его involuntary wait, вынужденным ожиданием. Проще говоря, это моменты, когда ваш процесс был готов исполняться, а такт физического ядра ушёл соседу.

Значение stИнтерпретация
0–1 %Норма. Оверселлинга либо нет, либо соседи спят
2–5 %Терпимо для веб-сервера, заметно для прокси-ноды с TLS
5–15 %Ядро поделено плотно; под нагрузкой latency поедет
> 15 % устойчивоВы платите за долю, которой не получаете

Эти границы — не норматив, а бытовой ориентир. Официально допустимого steal не существует нигде, да и ощущается одна и та же цифра по-разному: батч-задача её переживёт, интерактивный трафик — нет. Куда содержательнее не мгновенный процент, а его устойчивость: держится ли он десять минут кряду и воспроизводится ли вечером так же, как утром.

📌 ЗАМЕТКА

К соседней колонке wa (iowait) на виртуальной машине относитесь скептически. Формулировка в документации ядра недвусмысленна: «iowait ненадёжен при чтении из /proc/stat». Величина способна даже убывать, а на нескольких ядрах её корректный подсчёт затруднён. Диск оценивают не по ней, а через fio — к этому переходим ниже.

Владельцам будущих TLS-узлов стоит дополнительно выяснить, прокинут ли внутрь аппаратный AES:

grep -o -m1 -E 'aes|avx2' /proc/cpuinfo
openssl speed -evp aes-128-gcm -seconds 3

Штатная утилита openssl speed предназначена для измерения производительности криптоалгоритмов, а ключ -evp прогоняет шифр через EVP-интерфейс. Между AES-NI и программной реализацией разница измеряется не процентами, а кратностью, и на прокси-узле она напрямую задаёт потолок пропускной способности. Отсутствие флага aes в /proc/cpuinfo на тарифе, который продавали «под VPN», — законный повод для вопроса поддержке.

Диск: чем плох популярный способ его «проверить»

Фраза «прогнал dd, всё летает» не говорит о диске ничего. Команда dd if=/dev/zero of=test bs=1M count=1024 пишет последовательно и складывает данные в страничный кэш, а отдельные файловые системы ещё и схлопывают нули. Измеренной в итоге окажется память хоста.

⛔ ТАК ДЕЛАТЬ НЕЛЬЗЯ

Ни dd, ни hdparm -t, ни «скачался файл быстро» бенчмарком хранилища не являются. Ни один из них не даёт случайной нагрузки с очередью запросов, а губит СУБД и логи панели именно она. Инструмент здесь один — fio с флагом --direct=1.

apt install -y fio
fio --name=rr --filename=/root/fiotest --size=1G \
    --rw=randread --bs=4k --iodepth=32 --numjobs=4 \
    --direct=1 --ioengine=libaio --runtime=60 --time_based --group_reporting
rm -f /root/fiotest

Разберу ключи. Флаг --direct=1 переводит ввод-вывод в небуферизованный режим (O_DIRECT): запросы обходят страничный кэш, поэтому вы наблюдаете хранилище, а не оперативную память. Пара --bs=4k и --rw=randread задаёт случайное чтение четырёхкилобайтными блоками, что соответствует профилю базы данных, а не перекачки видеофайлов. Ключ --iodepth=32 удерживает очередь заполненной, а --time_based не позволяет тесту закончиться раньше шестидесятой секунды, даже когда гигабайт уже прочитан.

В отчёте существенны два показателя: IOPS и хвост распределения задержек в блоке clat percentiles. Среднее значение обманчиво, смотреть надо на 99-й процентиль. Хранилище с приличными IOPS и сотнями миллисекунд на p99 обернётся панелью, которая периодически «подвисает» ровно на глазах у пользователя.

Гигабитный порт — и где он заканчивается

Цифра в тарифе описывает скорость порта. Порт — это первый метр маршрута, а не весь маршрут.

Отрезки пути от VPS до клиента и инструменты их измерения
Схема на основе документации iperf3 и практики сетевой диагностики

Предлагаемый многими хостерами тест «скачайте файл с нашего соседнего сервера» подтверждает работоспособность виртуального адаптера — и ровно на этом его польза заканчивается. Осмысленная проверка стартует с публичного iperf3, стоящего в другой стране:

apt install -y iperf3
iperf3 -c ping.online.net -p 5200 -t 20        # отдача
iperf3 -c ping.online.net -p 5200 -t 20 -R     # приём (reverse)

Список публичных площадок опубликован на iperf.fr, и там же приводится оговорка, экономящая полчаса недоумения: одновременно сервер обслуживает лишь одно подключение. Если занято — берите следующий порт диапазона либо другую локацию. Прогонять непременно оба направления: перекос вида «отдаёт 900, принимает 80» — фирменный признак перегруженного аплинка.

Следом смотрим маршрут:

mtr -rwzbc 100 1.1.1.1

ℹ️ СПРАВКА

Сами по себе потери на промежуточных узлах в отчёте mtr ни о чём не свидетельствуют. Значительная часть маршрутизаторов сознательно понижает приоритет адресованных им же ICMP-ответов, продолжая при этом передавать транзитный трафик без единой потери. Выводы делаются исключительно по финальной строке: потери на пятом хопе при чистом последнем — штатная картина.

Если серверу предстоит нести туннель, проверьте заодно MTU:

ping -M do -s 1472 1.1.1.1

Полезная нагрузка 1472 байта вместе с 28 байтами заголовков даёт ровно 1500. Непрохождение пакета означает, что где-то по пути MTU ниже, а это будущие подвисающие TLS-хендшейки внутри туннеля. На такой случай в ядре предусмотрен параметр net.ipv4.tcp_mtu_probing: согласно документации, 0 — «выключено», 1 — «выключено по умолчанию, включается при обнаружении ICMP black hole», 2 — «всегда включено, начальный MSS берётся из tcp_base_mss».

Наконец, стоит выяснить, есть ли у вас выбор алгоритма контроля перегрузки:

sysctl net.ipv4.tcp_available_congestion_control

Документация ядра обещает присутствие одного лишь reno, остальное определяется конфигурацией сборки. Когда bbr в перечне отсутствует, а modprobe tcp_bbr не спасает, ответ почти наверняка находится в самом первом разделе — про виртуализацию.

✅ КАК ПРАВИЛЬНО

Короткий протокол приёмки, который имеет смысл прогнать до переезда чего-либо важного:

  • systemd-detect-virt — KVM или контейнер; плюс ls -l /dev/net/tun
  • dig -x и запрос в Zen с резолвера хостера
  • Доступность адреса из целевой страны
  • vmstat 1 10 в разное время суток — устойчивость st
  • grep -o -m1 aes /proc/cpuinfo плюс openssl speed -evp aes-128-gcm
  • fio, случайное чтение 4k, --direct=1 — IOPS и p99
  • iperf3 в обе стороны до сервера в другой стране
  • mtr -rwzbc 100 — читать последнюю строку

Что из намеренного считать браком

Далеко не всякая некрасивая цифра означает обман. Три процента steal на самом дешёвом тарифе — это ровно тот товар, за который заплачено: доля ядра стоит дешевле ядра, и иного никто не обещал. Двадцать тысяч IOPS вместо рекламных «до ста тысяч» тоже укладываются в норму, поскольку предлог «до» в маркетинге обозначает пиковую цифру хоста, а не вашу.

Обращаться в поддержку разумно там, где обещание звучало конкретно и не выполнено: продавали KVM — выдали LXC; заявляли выделенный порт — а реальная скорость стабильно вдвое ниже в обоих направлениях; обещали NVMe — задержки соответствуют сетевому HDD. Во всех прочих ситуациях спор бесполезнее, чем архив: сохраните результаты замеров в заметку. Полгода спустя, когда сервер начнёт подтормаживать, вам будет с чем сравнивать. Наличие этих цифр — вся разница между «кажется, стало хуже» и «p99 вырос втрое с марта».


Источники

💬 ВОПРОС К СООБЩЕСТВУ

Какой из замеров у вас чаще прочих ставил на сервере крест? У меня лидирует не steal и не диск, а перекос в iperf3: наружу летит, внутрь еле ползёт. Любопытно собрать чужие критерии «всё, оформляю возврат» — и услышать, случалось ли, что провайдер по предъявленным цифрам действительно переносил машину на другой хост.

Featured Replies

No posts to show

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу
Яндекс.Метрика

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.