Тестирование
Тестирование
Перед переносом сайта или сервиса на новый VPS полезно сделать короткий практический тест. Рекламная скорость порта и чужие отзывы не показывают, как сервер будет работать именно для нужной задачи, региона и времени суток.
Минимальный набор проверок:
- сеть: IPv4/IPv6,
iperf3,ping,mtrилиtracepath; - диск: последовательное и случайное чтение/запись через
fio; - CPU и память: короткий
sysbenchили другой понятный бенчмарк; - панель: reinstall, reboot, rescue-режим, снапшоты и бэкапы;
- поддержка: простой вопрос до переноса рабочего проекта.
Для Debian 13 есть готовый скрипт: Тест VPS на Debian 13. Он спрашивает про установку пакетов, собирает информацию о сервере, проверяет IPv4/IPv6 и пропускает тесты, если нужной утилиты нет.
Готовый набор команд
Команды ниже можно выполнить на VPS и сохранить вывод. Для сравнения провайдеров лучше запускать их в одинаковых условиях: новый сервер, та же ОС, похожее время суток и без параллельной нагрузки.
Подготовка пакетов:
sudo apt update
sudo apt install -y iperf3 mtr-tiny iputils-ping iputils-tracepath fio sysbench wget jq
mkdir -p ~/vps-test
Информация о сервере:
date -Is
uname -a
lscpu
free -h
df -h
ip -br addr
ip route
ip -6 route
curl -4fsS --max-time 8 https://ifconfig.me || wget -4qO- -T 8 https://ifconfig.me
curl -6fsS --max-time 8 https://ifconfig.me || wget -6qO- -T 8 https://ifconfig.me
Сеть через публичные iperf3-серверы:
iperf3 -c st.nn.ertelecom.ru -p 5202 -t 30
iperf3 -c st.nn.ertelecom.ru -p 5202 -P 5 -t 30
iperf3 -c st.nn.ertelecom.ru -p 5202 -P 5 -t 30 -R
iperf3 -c tumst.st.mtsws.net -p 3333 -t 30
iperf3 -c tumst.st.mtsws.net -p 3333 -P 5 -t 30
iperf3 -c tumst.st.mtsws.net -p 3333 -P 5 -t 30 -R
iperf3 -c mskst.st.mtsws.net -p 3333 -P 5 -t 30
iperf3 -c mskst.st.mtsws.net -p 3333 -P 5 -t 30 -R
Международные проверки по публичному списку iperf.fr:
# Europe, France / Paris
iperf3 -c ping.online.net -p 5200 -P 5 -t 30
iperf3 -c ping.online.net -p 5200 -P 5 -t 30 -R
# Europe, Netherlands / Serverius
iperf3 -c speedtest.serverius.net -p 5002 -P 5 -t 30
iperf3 -c speedtest.serverius.net -p 5002 -P 5 -t 30 -R
# Americas, USA / California
iperf3 -c iperf.he.net -p 5201 -P 5 -t 30
iperf3 -c iperf.he.net -p 5201 -P 5 -t 30 -R
Публичные iperf3-серверы могут быть заняты. Если один сервер отвечает server is busy, это не обязательно проблема VPS: стоит повторить позже или взять другой хост из списка iperf.fr.
Быстрый прогон по публичному списку itdoginfo/russian-iperf3-servers:
wget -O ~/vps-test/russian-iperf3-speedtest.sh https://github.com/itdoginfo/russian-iperf3-servers/raw/main/speedtest.sh
bash ~/vps-test/russian-iperf3-speedtest.sh -f
Задержка, потери и маршрут:
ping -c 20 st.nn.ertelecom.ru
mtr -rwzc 100 st.nn.ertelecom.ru
tracepath st.nn.ertelecom.ru
ping -c 20 mskst.st.mtsws.net
mtr -rwzc 100 mskst.st.mtsws.net
tracepath mskst.st.mtsws.net
IPv6 без полного скрипта:
ip -br -6 addr
ip -6 route
curl -6fsS --max-time 8 https://ifconfig.me || wget -6qO- -T 8 https://ifconfig.me
ping -6 -c 10 -W 2 2606:4700:4700::1111
ping -6 -c 10 -W 2 ya.ru
mtr -6 -r -w -z -c 50 2606:4700:4700::1111
mtr -6 -r -w -z -c 50 ya.ru
tracepath -6 2606:4700:4700::1111
tracepath -6 ya.ru
Диск:
mkdir -p ~/vps-test/fio
df -h /
FIO_ENGINE=io_uring
FIO_FILE="$HOME/vps-test/fio/nvme-test.file"
fio --name=seq-write --ioengine="$FIO_ENGINE" --filename="$FIO_FILE" --size=4G --rw=write --bs=1M --iodepth=16 --direct=1 --runtime=60 --time_based --group_reporting
fio --name=seq-read --ioengine="$FIO_ENGINE" --filename="$FIO_FILE" --size=4G --rw=read --bs=1M --iodepth=16 --direct=1 --runtime=60 --time_based --group_reporting
fio --name=rand-rw --ioengine="$FIO_ENGINE" --filename="$FIO_FILE" --size=4G --rw=randrw --rwmixread=70 --bs=4k --iodepth=32 --direct=1 --runtime=60 --time_based --group_reporting
rm -f "$FIO_FILE"
Если io_uring не поддерживается на конкретном ядре или образе, повторите блок с FIO_ENGINE=libaio. Важно указывать --ioengine: с неявным psync iodepth фактически ограничивается 1, и тест хуже показывает поведение NVMe под очередью.
CPU и память:
sysbench cpu --cpu-max-prime=20000 --threads=1 run
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run
sysbench memory --threads=$(nproc) run
Что смотреть в результатах
date, uname, lscpu, free и df нужны не для оценки скорости, а для контекста: чтобы потом было понятно, какой сервер, ОС, CPU, память и диск тестировались.
iperf3 проверяет пропускную способность между VPS и внешним тестовым сервером. Обычный запуск показывает направление от VPS к публичному серверу, -R проверяет обратное направление, а -P 5 запускает несколько TCP-потоков. В выводе стоит смотреть не только на итоговый Bitrate, но и на Retr: большое число ретрансмитов может указывать на потери, перегруженный маршрут, проблемы конкретного тестового сервера или особенности TCP-настройки.
ping, mtr и tracepath помогают понять задержку, потери и маршрут до тестовой точки. Если iperf3 показывает плохую скорость, эти команды помогают отличить слабый канал от проблемного маршрута.
IPv6 нужно проверять отдельно от IPv4. Если тариф обещает /64 IPv6, но ip -br -6 addr не показывает глобальный адрес, это вопрос к настройке сервера или панели. Если адрес есть, но curl -6, ping -6 и tracepath -6 не проходят, проблема может быть в маршруте, firewall или DNS. В mtr скрытые промежуточные узлы с ??? не всегда означают потерю: важнее смотреть потери на конечной точке.
fio показывает поведение диска. Последовательные тесты полезны для крупных файлов и бэкапов, а rand-rw ближе к нагрузке сайтов, баз данных и CMS с большим числом мелких операций. Для NVMe лучше использовать io_uring или libaio и файл хотя бы 4 ГБ, чтобы проверить работу с очередью, а не получить красивое число из синхронного psync.
sysbench дает грубую оценку CPU и памяти. Это не полноценный серверный бенчмарк, но его достаточно, чтобы сравнить несколько VPS между собой при одинаковых настройках.
Публичные серверы iperf3
Для российских направлений удобно использовать список itdoginfo/russian-iperf3-servers. В репозитории собраны публичные iperf3-серверы в России, список хранится в list.yml, а доступность проверяется автоматически.
На странице проекта есть готовый скрипт:
bash <(wget -qO- https://github.com/itdoginfo/russian-iperf3-servers/raw/main/speedtest.sh)
И быстрый режим:
bash <(wget -qO- https://github.com/itdoginfo/russian-iperf3-servers/raw/main/speedtest.sh) -f
Перед запуском удаленного shell-скрипта лучше открыть его и быстро просмотреть. Более осторожный вариант:
wget -O speedtest.sh https://github.com/itdoginfo/russian-iperf3-servers/raw/main/speedtest.sh
less speedtest.sh
bash speedtest.sh -f
Список полезен не как абсолютный рейтинг провайдеров, а как набор внешних точек для проверки маршрутов. Если один город или оператор показывает плохой результат, стоит перепроверить другие города, обратное направление -R, задержку через ping и трассировку маршрута.
Как фиксировать результат
Для заметки по провайдеру достаточно записать:
- тариф, город и заявленную скорость порта;
- дату и примерное время теста;
- публичный IPv4 и наличие рабочего IPv6, если провайдер обещает IPv6;
- команду
iperf3, сервер, порт, число потоков и длительность; - итоговый
Bitrateи число ретрансмитов; - отдельно результат прямого направления и
-R; - вывод: это похоже на лимит тарифа, перегруженный маршрут или разовую проблему.
Такой формат проще сравнивать между провайдерами и повторять через несколько недель.
