Когда я использую команду netstat, она показывает ..
tcp 0 0 локальный хост: 18056 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 16683 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 16701 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 16888 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 16832 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17725 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17682 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17414 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17606 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17737 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 16632 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 16825 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17807 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17715 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17304 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17217 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 18098 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17624 локальный хост: MySQL TIME_WAIT
tcp 0 0 локальный хост: 17734 локальный хост: MySQL TIME_WAIT
Соединение Time_wait составляет около 2000.
Чтобы избежать этого, я добавил net.ipv4.tcp_fin_timeout = 30 в /etc/sysctl.conf
Но все же у меня есть проблема, как ее избежать?
TIME_WAIT существует по какой-то причине, и причина в том, что пакеты TCP могут задерживаться и приходить не по порядку. Если с ним не справиться, соединения будут прерваны, хотя они должны были быть успешными. Есть отличное объяснение всего этого здесь.
Ваша проблема в том, что вы не повторно используете соединения MySQL в своем приложении, а вместо этого создаете новое соединение каждый раз, когда хотите выполнить SQL-запрос. Это включает в себя не только установку TCP-соединения, но и передачу по нему учетных данных для аутентификации. И это происходит с каждым запросом (или, по крайней мере, с каждым клиентским веб-запросом), и это расточительно и требует много времени.
Если вы не знаете, как включить постоянный пул соединений MySQL на любом языке, который вы используете, StackOverflow будет хорошим местом, чтобы спросить.