Подробный гайд: Низкая скорость скачивания в Linux
Ниже представлен структурированный troubleshooting-гайд, который поможет выявить и устранить причины низкой скорости загрузки в Linux. Руководство разделено на этапы: от базовой диагностики до тонкой настройки сетевого стека.
1. Первичная диагностика
Прежде чем менять настройки, убедитесь, что проблема действительно в ОС, а не в провайдере, роутере или оборудовании.
| Команда | Что показывает |
|---|---|
ping -c 5 1.1.1.1 |
Базовая задержка и потери пакетов |
mtr -r 1.1.1.1 |
Трассировка с потерями по каждому узлу |
speedtest-cli или fast.com |
Реальная пропускная способность до сервера |
ip link show / iw dev |
Статус интерфейса, тип соединения, MTU |
dmesg | grep -iE 'eth|wlan|network|link' |
Ошибки драйверов/физического уровня |
Если speedtest показывает низкую скорость, а mtr демонстрирует высокие потери на шлюзе провайдера → проблема на стороне сети/роутера, а не Linux.
2. Основные причины и решения
2.1. DNS и разрешение имён
Медленный или ненадёжный DNS косвенно влияет на скорость: браузер/клиент долго ищет IP, таймауты снижают общую производительность.
Решение:
# Проверка текущего DNS
resolvectl status # systemd-resolved
# или
cat /etc/resolv.conf
Временная замена на Cloudflare/Google:
sudo nano /etc/systemd/resolved.conf
# Раскомментируйте и измените:
DNS=1.1.1.1 8.8.8.8
FallbackDNS=1.0.0.1 8.8.4.4
sudo systemctl restart systemd-resolved
sudo systemctl restart NetworkManager
2.2. IPv6 маршрутизация
Иногда IPv6-маршруты через провайдера имеют высокую задержку или ограничены.
Проверка:
ping6 -c 3 ipv6.google.com
Если пинг высокий или есть потери, временно отключите IPv6:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
Для постоянного отключения добавьте строки в /etc/sysctl.d/99-disable-ipv6.conf и выполните sudo sysctl -p.
2.3. Менеджеры пакетов и зеркала
apt, dnf, pacman могут качать с географически далёких или перегруженных зеркал.
Ubuntu/Debian:
sudo apt install apt-transport-https netselect-apt
sudo netselect-apt
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo netselect-apt stable # заменит на быстрые зеркала
sudo apt update
Fedora:
sudo dnf install dnf-plugin-fastestmirror
sudo dnf config-manager --setopt=fastestmirror=True --save
Arch Linux:
sudo pacman-mirrors --country RU --api --protocol https
sudo pacman -Syy
2.4. Wi-Fi и драйверы
Беспроводные адаптеры часто работают в энергосберегающем режиме или используют неоптимальный канал.
Отключение энергосбережения:
sudo iw dev wlan0 set power_save off
Для сохранения после перезагрузки создайте /etc/NetworkManager/conf.d/wifi-powersave.conf:
[connection]
wifi.powersave = 2
(2 = отключено, 3 = включено)
Обновление драйверов:
sudo ubuntu-drivers autoinstall # Ubuntu
# или установите linux-firmware, dkms-модули под ваш чипсет
2.5. Фоновые процессы и лимиты
Менеджер обновлений, облачные клиенты, торренты, Docker-контейнеры могут незаметно потреблять канал.
Мониторинг в реальном времени:
sudo nethogs # по процессам
sudo iftop -i eth0 # по хостам
sudo bmon # наглядный график
Ограничьте прожорливые сервисы или отключите их при необходимости.
3. Оптимизация TCP/IP стека ядра
Современные ядра Linux (≥5.10) отлично работают из коробки, но в некоторых сценариях тонкая настройка даёт +15–30% к пропускной способности.
3.1. Алгоритм управления перегрузкой
# Проверка текущего
cat /sys/module/tcp_bbr/parameters/active # или bbr2
sysctl net.ipv4.tcp_congestion_control
# Переключение на BBR (рекомендуется для большинства сетей)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
Для постоянного применения добавьте в /etc/sysctl.d/99-tcp-bbr.conf:
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
3.2. Размеры буферов и окна
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
sudo sysctl -w net.ipv4.tcp_window_scaling=1
sudo sysctl -w net.ipv4.tcp_sack=1
sudo sysctl -w net.ipv4.tcp_timestamps=1
Не меняйте значения вслепую на системах с <2 ГБ ОЗУ. После тестов сохраните в /etc/sysctl.d/99-network-tuning.conf и примените: sudo sysctl -p /etc/sysctl.d/99-network-tuning.conf.
3.3. MTU (Maximum Transmission Unit)
Неправильный MTU вызывает фрагментацию и падение скорости.
ip link show eth0 # ищем mtu 1500
# Для PPPoE часто нужно 1492:
sudo ip link set dev eth0 mtu 1492
Тест MTU:
ping -M do -s 1472 -c 3 1.1.1.1 (уменьшайте -s пока не начнёт проходить).
4. Полезные утилиты для анализа
| Утилита | Назначение |
|---|---|
ethtool -i eth0 |
Информация о драйвере, версия прошивки |
ethtool -S eth0 | grep -i drop |
Счётчики ошибок/потерь на интерфейсе |
vnstat |
Долгосрочная статистика трафика |
iperf3 |
Тест чистой пропускной способности между двумя хостами |
tcpdump -i eth0 -n 'port 80 or port 443' -w cap.pcap |
Глубокий анализ пакетов (в связке с Wireshark) |
5. Когда проблема не в Linux
- Ограничения провайдера: тарифные лимиты, шейпинг на вечернее время, NAT-ограничения.
- Роутер: устаревшая прошивка, перегрев, включённый QoS/SIP ALG, слабый CPU.
- Кабель/розетка: повреждённая витая пара, плохой контакт, длина >100 м без свитча.
- Сервер-источник: загруженный CDN, гео-ограничения, лимиты на скачивание.
Как проверить:
загрузитесь с LiveUSB (Ubuntu/Fedora), подключитесь к той же сети, запустите speedtest-cli. Если скорость такая же → проблема аппаратная/сетевая.
Чек-лист быстрого восстановления
sudo apt/dnf/pacman update→ обновите систему и ядро.- Перезапустите сеть:
sudo systemctl restart NetworkManager(илиsystemd-networkd). - Включите
tcp_congestion_control=bbr. - Отключите энергосбережение Wi-Fi.
- Смените DNS на
1.1.1.1/8.8.8.8. - Проверьте зеркала пакетного менеджера.
- Протестируйте скорость утилитой
speedtest-cliилиwgetкрупного файла.
Заключение
Низкая скорость в Linux редко бывает вызвана одной причиной. Чаще всего это комбинация: неоптимальный DNS, фоновые процессы, устаревшие драйверы или отсутствие современного алгоритма управления перегрузкой. Применяйте изменения пошагово, фиксируйте замеры до/после (speedtest-cli, iperf3, curl -o /dev/null -w "%{speed_download}\n"), и не меняйте несколько параметров одновременно.