Подключение к MySQL серверу в SYN_SENT
В последние несколько дней мы столкнулись со странной проблемой между нашим сервером приложений и сервером базы данных (Mysql): соединение с сервером базы данных с сервера приложений зависает SYN_SENT
состояние и после этого мы не можем установить соединение с сервером базы данных через порт mysql (3306). Когда мы проверили netstat
вывод на сервер базы данных его в SYN_RECV
государство.
Что я могу выяснить, так это то, что сервер MySQL получает запрос SYN, а также отвечает, и, следовательно, он не достигает клиента SYN_RECV
на стороне сервера и SYN_SENT
на стороне клиента. Я думаю SYN_SENT
состояние должно пройти через некоторое время, и из-за этого другие попытки соединения с БД не должны зависать.
Кто-нибудь знает, как мы можем решить эту проблему?
Детали настройки:
Сервер приложений: RHEL 5.4, выпуск ядра = 2.6.18-164.el5, x86_64
Сервер базы данных: Mysql Версия: 5.1.49 RHEL 5.4, выпуск ядра = 2.6.18-164.el5, x86_64
1 ответ
У меня была эта проблема с моим провайдером по вечерам. Похоже, какой-то маршрутизатор в цепочке между вами и целевым хостом не работает должным образом с tcp_sack. Решение состоит в том, чтобы отключить его в /etc/sysctl.conf
net.ipv4.tcp_sack = 0
Но это очень плохо для сервера, потому что это замедлит соединения TCP. Вы должны оскорблять своего провайдера