Настройка TCP BBR
AdamОптимизация с помощью скрипта
Откройте PuTTY и подключитесь к серверу.
Перейдите в ту директорию, куда вы загрузили скрипт optimise_server.sh:
https://disk.yandex.ru/d/wA9HYTjVs9Z8jQ
cd /home/your-username/
Сделайте скрипт исполняемым:
chmod +x optimise_server.sh
После того как скрипт стал исполняемым, вы можете его запустить:
sudo ./optimise_server.sh
Если он запросит перезагрузку сервера, выполните команду reboot после завершения работы скрипта
Ручная настройка BBR и FQ
1. Проверка версии Ядра Linux
TCP BBR поддерживается начиная с версии ядра Linux 4.9. Вы можете проверить версию вашего ядра с помощью команды uname -r.
2. Настройка TCP BBR
Откройте файл /etc/sysctl.conf для редактирования:
sudo nano /etc/sysctl.conf
3. Добавьте следующую строку в конец файла
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
4. Сохраните файл и примените изменения
sudo sysctl -p
5. Проверьте текущий планировщик очередей:
sysctl net.core.default_qdisc
Вы должны увидеть: net.core.default_qdisc = fq.
6. Проверьте текущий алгоритм управления перегрузкой:
sysctl net.ipv4.tcp_congestion_control
Вы должны увидеть: net.ipv4.tcp_congestion_control = bbr.
BBR (Bottleneck Bandwidth and Round-trip propagation time) — это алгоритм управления перегрузкой в сети, разработанный Google. Он улучшает скорость передачи данных и уменьшает задержки, определяя максимальную пропускную способность канала и минимальное время задержки, что позволяет эффективно использовать доступные сетевые ресурсы.
FQ (Fair Queuing) — это алгоритм планирования пакетов, который распределяет сетевые ресурсы равномерно между всеми потоками данных, предотвращая доминирование одного потока над другими. В сочетании с BBR, FQ помогает минимизировать задержки и обеспечить стабильную работу сети при высокой нагрузке.
Разбор параметров:
net.core.default_qdisc=fq
• Описание: Устанавливает алгоритм планирования очереди по умолчанию на FQ (Fair Queuing).
• Значение: Этот алгоритм помогает равномерно распределять пропускную способность между всеми потоками данных, предотвращая доминирование одного потока над другими.
2. net.ipv4.tcp_congestion_control=bbr
• Описание: Устанавливает алгоритм управления перегрузкой TCP на BBR.
• Значение: BBR оптимизирует использование пропускной способности и уменьшает задержки в сети.
3. net.core.rmem_max = 67108864
• Описание: Устанавливает максимальный размер буфера приема для сокетов.
• Значение: Увеличивает максимальный размер буфера для приема данных, что может быть полезно для высокоскоростных соединений.
4. net.core.wmem_max = 67108864
• Описание: Устанавливает максимальный размер буфера передачи для сокетов.
• Значение: Увеличивает максимальный размер буфера для передачи данных, улучшая производительность при высоких нагрузках.
5. net.core.wmem_default = 2097152
• Описание: Устанавливает размер буфера передачи по умолчанию.
• Значение: Увеличивает стандартный размер буфера для передачи данных, улучшая стабильность и скорость соединений.
6. net.core.netdev_max_backlog = 10240
• Описание: Устанавливает максимальный размер очереди входящих пакетов на интерфейсе.
• Значение: Увеличение этого значения позволяет обработать больше входящих пакетов, прежде чем они будут отброшены, что может улучшить производительность при высокой нагрузке.
7. net.core.somaxconn = 8192
• Описание: Устанавливает максимальный размер очереди ожидающих подключений.
• Значение: Увеличение этого значения полезно для серверов с большим количеством входящих подключений (например, веб-серверы).
8. net.ipv4.tcp_syncookies = 1
• Описание: Включает использование syncookies для предотвращения атак типа SYN flood.
• Значение: Защищает сервер от атак SYN flood, что делает его более устойчивым к перегрузкам.
9. net.ipv4.tcp_tw_reuse = 1
• Описание: Позволяет повторное использование сокетов в состоянии TIME_WAIT.
• Значение: Уменьшает количество сокетов в состоянии TIME_WAIT, что может быть полезно для серверов с большим количеством короткоживущих соединений.
10. net.ipv4.tcp_fin_timeout = 30
• Описание: Устанавливает таймаут закрытия соединения (FIN) в секундах.
• Значение: Уменьшение этого времени позволяет быстрее освобождать ресурсы, связанные с закрытием соединений.
11. net.ipv4.tcp_keepalive_time = 1200
• Описание: Устанавливает время в секундах между TCP keepalive проверками.
• Значение: Увеличивает частоту проверки активных соединений, что помогает быстрее выявлять и закрывать неактивные соединения.
12. net.ipv4.tcp_keepalive_probes = 5
• Описание: Устанавливает количество keepalive проверок, после которых соединение считается неактивным.
• Значение: Ускоряет выявление и завершение неактивных соединений.
13. net.ipv4.tcp_keepalive_intvl = 30
• Описание: Устанавливает интервал между TCP keepalive проверками.
• Значение: Делает проверки более частыми, что позволяет быстрее обнаруживать неактивные соединения.
14. net.ipv4.tcp_max_syn_backlog = 10240
• Описание: Устанавливает максимальное количество полуоткрытых (SYN) соединений, ожидающих завершения.
• Значение: Увеличение этого значения позволяет серверу обрабатывать больше одновременных попыток подключения, что полезно для серверов с высокой нагрузкой.
15. net.ipv4.tcp_max_tw_buckets = 5000
• Описание: Устанавливает максимальное количество сокетов в состоянии TIME_WAIT.
• Значение: Огранивает количество сокетов в состоянии TIME_WAIT, что снижает использование системных ресурсов.
16. net.ipv4.tcp_fastopen = 3
• Описание: Включает TCP Fast Open (TFO), что позволяет ускорить процесс установления соединения.
• Значение: Ускоряет установление TCP соединений, что особенно полезно для веб-серверов.
17. net.ipv4.tcp_mem = 25600 51200 102400
• Описание: Устанавливает параметры памяти для TCP в килобайтах (минимальный, начальный и максимальный размер).
• Значение: Эти параметры контролируют, сколько памяти ядро выделяет для буферов TCP, что влияет на производительность сети.
18. net.ipv4.udp_mem = 25600 51200 102400
• Описание: Устанавливает параметры памяти для UDP в килобайтах (минимальный, начальный и максимальный размер).
• Значение: Эти параметры аналогичны TCP, но применяются к UDP соединениям.
19. net.ipv4.tcp_rmem = 16384 262144 8388608
• Описание: Устанавливает размер буфера приема для TCP соединений (минимальный, начальный и максимальный).
• Значение: Увеличивает размеры буферов для приема данных, что полезно для высокоскоростных соединений.
20. net.ipv4.tcp_wmem = 32768 524288 16777216
• Описание: Устанавливает размер буфера передачи для TCP соединений (минимальный, начальный и максимальный).
• Значение: Увеличение буфера передачи улучшает производительность при отправке данных.
21. net.ipv4.tcp_mtu_probing = 1
• Описание: Включает автоматическое определение максимального размера сегмента (MTU).
• Значение: Это позволяет избегать проблем с фрагментацией пакетов, улучшая стабильность и скорость соединений.
22. net.ipv4.tcp_slow_start_after_idle=0
• Описание: Отключает медленный старт после периода бездействия.
• Значение: Увеличивает скорость восстановления пропускной способности после простоя, что улучшает производительность для соединений с паузами.
23. fs.inotify.max_user_instances = 8192
• Описание: Увеличивает количество inotify инстанций, которые могут быть созданы пользователем.
• Значение: Это полезно для систем, которые отслеживают большое количество файлов или каталогов, улучшая производительность мониторинга файловой системы.
24. net.ipv4.ip_local_port_range = 1024 45000
• Описание: Определяет диапазон локальных портов, доступных для динамического назначения.
• Значение: Увеличивает диапазон доступных портов, что полезно для серверов с большим количеством исходящих соединений.