Jeśli klient łączy się z serwerem MySQL, zwykle otwiera port lokalny, na przykład:
localhost:12345 -> mysqlserver:3306
Jeśli klient zamknie połączenie, klient otrzyma TIME_WAIT. Z powodu routingu TCP pakiet może dotrzeć do portu tymczasowego z opóźnieniem. Połączenie w TIME_WAIT po prostu odrzuca te pakiety. Bez TIME_WAIT port lokalny może zostać ponownie wykorzystany do innego połączenia i może odbierać pakiety z poprzedniego połączenia.
W przypadku często używanej aplikacji w sieci, która otwiera połączenie mysql na żądanie, można spodziewać się dużej liczby połączeń TIME_WAIT. Nie ma w tym nic złego.
Problemy mogą wystąpić, jeśli zakres portów lokalnych jest zbyt niski, więc nie można już otwierać połączeń wychodzących. Zwykły limit czasu jest ustawiony na 60 sekund. Tak więc problem może już wystąpić przy ponad 400 żądaniach na sekundę na niskich zakresach.
Sprawdź:
Aby sprawdzić ilość TIME_WAIT, możesz użyć następującego polecenia:
$ cat /proc/net/sockstat
sockets: used 341
TCP: inuse 12 orphan 0 tw 33365 alloc 23 mem 16
UDP: inuse 9 mem 2
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
Wartość po „tw”, w tym przypadku 33365, pokazuje ilość TIME_WAIT.
Rozwiązania:
a. Strojenie TIME_WAIT (przykłady systemu operacyjnego Linux):
Skróć czas oczekiwania na TIME_WAIT:
# small values are ok, if your mysql server is in the same local network
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
Zwiększ zakres portów dla portów lokalnych:
# check, what you highest listening ports are, before setting this
echo 15000 65000 > /proc/sys/net/ipv4/ip_local_port_range
Ustawienia /proc/sys/net/ipv4/tcp_tw_recycle
i /proc/sys/net/ipv4/tcp_tw_reuse
może być również interesujące. (Ale doświadczyliśmy dziwnych skutków ubocznych przy tych ustawieniach, więc lepiej ich unikaj. Więcej informacji w tym odpowiedź
)
b. Trwałe połączenia
Niektóre języki programowania i biblioteki obsługują trwałe połączenia. Innym rozwiązaniem może być użycie lokalnie zainstalowanego serwera proxy, takiego jak „ProxySQL”. Zmniejsza to liczbę nowych i zamkniętych połączeń.