За последние несколько дней мы столкнулись со странной проблемой между нашим сервером приложений и сервером базы данных (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, kernel-release = 2.6.18-164.el5, x86_64
У меня была эта проблема с моим провайдером по вечерам. Похоже, какой-то маршрутизатор в цепочке между вами и целевым хостом не работает должным образом с tcp_sack. Решение - отключить его в /etc/sysctl.conf
net.ipv4.tcp_sack = 0
Но для сервера это очень плохо, потому что замедлить tcp соединения. Вы должны оскорбить своего провайдера