DevOps, Linux, 2 git`a
  • Обо мне
  • Категории
  • Теги
  • Архив

Тюнинг линукс tcp/ip

Содержание

  • Открытые файлы
  • Порты
  • Состояние TIME_WAIT
  • Отслеживание соединения
  • Ядро
    • Дополнительно

Тонкая настройка сетевого стека линукс для обработки большого числа запросов.

Открытые файлы

Каждый TCP сокет требует собственного файлового идентификатора, необходимо увеличить лимит открытых файлов. Текущие лимиты возможно посмотреть командой ulimit -a. Лимит открытых файлов выставим 999999 и скорее всего быстрее закончится память чем мы упремся в это ограничение, хотя все возможно. Нужно так же помнить, что лимиты возможно выставлять для определенных пользователей в системе. Лимиты должный быть заданы в файле, который необходимо разместить в директории /etc/security/limits.d/. Содержание файла:

*   soft    nofile 999999
*   hard    nofile 999999

* - для всех пользователей

Порты

Неободимо увеличить число портов учавствующих в открытии соединения. По умолчанию для использования доступны порты с 32768 по 61000. Надо изменить это значение на 18000 - 65535.

Состояние TIME_WAIT

Соединение TCP проходит несколько стадий во время своей жизни. Рассмотрим последнюю стадию закрытия соединения TIME_WAIT. Это время которое отведено на окончание соединения и по умолчанию оно равно 120 секунд и это очень много. Пока соединение не закрыто занимаются ресурсы сервера. В качестве эксперемента возможно установить значение папраметра TIME_WAIT в 1 секунду, НО это подходит не для всех шаблонов использование и должно внедрятся эксперементально.

Для того чтоб изменения вступили в силу необходимо внести их в фаил, который надо разместить в дирректории /etc/sysctl.d/. Содержание файла:

net.ipv4.ip_local_port_range = 18000    65535
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 1

Отслеживание соединения

Побочный эффект iptables это разрастание таблицы в которую заносятся ESTABLISHED соединения. Таблица находится в оперативной памяти. Самый правильный способ не допустить разрастания или переполнения этой таблицы, это уменьшить время хранения значения в таблицы nf_conntrack_tcp_timeout_established. По умолчанию значение равно 432000 секунд. Надо изменить на значение намного меньше. Занесем в фаил следующее значение:

net.netfilter.nf_conntrack_tcp_timeout_established=600

Ядро

В ядре линукса >3.5 внесено много оптимизация по умолчанию, которые раньше приходилось делать вручную. Используйте новые ядра :)

Дополнительно
#Retry SYN/ACK only three times, instead of five  
net.ipv4.tcp_synack_retries = 3  
# Try to close things only twice  
net.ipv4.tcp_orphan_retries = 2  
# FIN-WAIT-2 for only 5 seconds  
net.ipv4.tcp_fin_timeout = 5  
# Increase syn socket queue size (default: 512)  
net.ipv4.tcp_max_syn_backlog = 2048  
# One hour keepalive with fewer probes (default: 7200 & 9)  
net.ipv4.tcp_keepalive_time = 3600  
net.ipv4.tcp_keepalive_probes = 5  
# Max packets the input can queue  
net.core.netdev_max_backlog = 2500  
# Keep fragments for 15 sec (default: 30)  
net.ipv4.ipfrag_time = 15  
# Use H-TCP congestion control  
net.ipv4.tcp_congestion_control = htcp

Вольный перевод www.lognormal.com и news.ycombinator.com

Комментарии
comments powered by Disqus

Опубликовано

июн 21, 2013

Категория

devops

Теги

  • linux 2
  • ports 1
  • sysctl 1
  • tuning 1

Контакты

Получать обновления

  • Creative Commons License DevOps, linux, 2 git`a. Дмитрий Леонов
  • Создано с помощью Pelican. Тема Elegant от Talha Mansoor. Перевод темы Дмитрий Леонов