Боремся за сетевую производительность системы

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 то можно использовать оба параметра

VN:F [1.9.21_1169]
Rating: 5.3/10 (26 votes cast)
VN:F [1.9.21_1169]
Rating: +2 (from 10 votes)
Боремся за сетевую производительность системы, 5.3 out of 10 based on 26 ratings

Теги: , , ,

Ваш отзыв