У меня есть неблокирующий сервер Java, который отслеживает все каналы сокетов в селекторе. Затем я устанавливаю 500 подключений к серверу и регулярно отправляю данные. Каждая часть данных, которую получает сервер, возвращается клиенту.
Проблема возникает, когда тест прекрасно работает в течение нескольких часов, а затем внезапно постепенно все сокеты, которыми управляет сервер, выдают исключение Connection timed out IOException при попытке чтения данных.
Я проверил, голодает ли клиентский поток (и не отправляет ли он данные), но я уступаю клиентскому потоку, который перебирает все сокеты и записывает данные. Трафик вроде бы постоянно течет исправно, но через какое-то время просто все замирает. Любые идеи, что может быть причиной такого поведения?
Я работаю на платформе Linux с последней итерацией Java 6. Мое приложение запускает два потока: один для сервера и один для всех клиентов. Заранее спасибо!
Дополнительно: проблема связана с Linux, а не с моим кодом. Когда я запускаю ту же самую настройку на компьютере с Windows (на том же оборудовании), время ожидания никогда не истекает, но через несколько часов они начинают происходить в Linux. Это должно быть какая-то настройка TCP в Linux, из-за которой это происходит. Спасибо за предложение.
netstat -a on
клиента и сервера? Какие-нибудь сокеты в неудовлетворительном состоянии? - person John Kugelman   schedule 21.06.2009