Боремся за сетевую производительность системы
20 Sep 2022 | Автор: dd |В борьбе за живучесть высоконагруженного почтаря, пришлось столкнуться с тем что письма дропались при попытке получения.
Увеличение количества сессий smtp не помогло, т.к количество активных просто увеличилось до лимита и дальше пошли копиться сессии TIME_WAIT
# netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
426 ESTABLISHED
10 FIN_WAIT1
31 LISTEN
204 TIME_WAIT
уменьшать количество активных сессий с одного айпи, как я делал ранее на exim, был не вариант, поскольку на почтаре обитало порядка 7-8 миллионов юзверей и какое то их количество могло запросто дожидаться писем с какой нить соцсети, например того же пейсбуха. поэтому требовалось копать в другую сторону
в тырнетах рекомендовалось добавить в ядро параметр для ускоренного освобождения сокета
net.ipv4.tcp_tw_recycle = 0
но при перезапуске конфига влезала ошибка
# sysctl -p /etc/sysctl.conf
sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory
Небольшой гуглеж дает ответ, что параметр net.ipv4.tcp_tw_recycle был выпилен из ядра на версии 4.12, ввиду того, что имелись проблемы с работой из-за NAT.
Чекаем версию ядра
# uname -a
Linux mail.xxxx 5.18.4-1.el8.elrepo.x86_64
и понимаем что это как раз про нас.
Вместо него рекомендуется устанавливать параметр
net.ipv4.tcp_tw_reuse = 1
который позволяет использовать TIME-WAIT сокет повторно. по умолчанию в системе взведено значение 2, которое позволяет этот функционал только для loopback
рестартим конфиг и смотрим, что изменилось
# sysctl -p /etc/sysctl.conf
# netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
462 ESTABLISHED
31 LISTEN
4 SYN_RECV
88 TIME_WAIT
Если юзаем ядро ниже 4.12 то можно использовать оба параметра
Боремся за сетевую производительность системы,Теги: centos, почтовые системы, Сетевые протоколы, Сети