sql >> Databáze >  >> RDS >> Mysql

mysql TIME_WAIT; příliš mnoho problémů s připojením

Pokud se klient připojí k serveru MySQL, obvykle otevře místní port, příklad:

 localhost:12345 -> mysqlserver:3306

Pokud klient uzavře připojení, klient obdrží TIME_WAIT. Kvůli směrování TCP může paket dorazit na dočasný port pozdě. Připojení za TIME_WAIT tyto pakety pouze zahodí. Bez TIME_WAIT může být místní port znovu použit pro další připojení a může přijímat pakety z předchozího připojení.

U vysoce frekventované aplikace na webu, která otevírá připojení mysql na požadavek, lze očekávat velké množství připojení TIME_WAIT. Není na tom nic špatného.

Problémy mohou nastat, pokud je rozsah vašeho místního portu příliš nízký, takže již nemůžete otevřít odchozí připojení. Obvyklý časový limit je nastaven na 60 sekund. Problém tedy může nastat již u více než 400 požadavků za sekundu na nízkých rozsazích.

Zkontrolujte:

Chcete-li zkontrolovat množství TIME_WAIT, můžete použít následující příkaz:

$ 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

Hodnota za „tw“, v tomto případě 33365, ukazuje množství TIME_WAIT.

Řešení:

A. Ladění TIME_WAIT (příklady operačního systému založeného na Linuxu):

Zkraťte časový limit pro 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

Zvětšete rozsah portů pro místní porty:

# check, what you highest listening ports are, before setting this
echo 15000 65000 > /proc/sys/net/ipv4/ip_local_port_range

Nastavení /proc/sys/net/ipv4/tcp_tw_recycle a /proc/sys/net/ipv4/tcp_tw_reuse může být také zajímavé. (Ale s těmito nastaveními jsme zaznamenali podivné vedlejší účinky, takže se jim raději vyhněte. Více informací v tomto odpověď )

b. Trvalá připojení

Některé programovací jazyky a knihovny podporují trvalá připojení. Dalším řešením může být použití lokálně nainstalovaného proxy, jako je „ProxySQL“. To snižuje množství nových a uzavřených připojení.



  1. Procedura Oracle nevrací výsledky při provádění úlohy skriptu na SSIS

  2. Únikový řetězec Python pro MySQL

  3. Přidejte roky k datu v PostgreSQL

  4. Vypočítejte percentil z aktuálnosti v MySQL