Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ServerSocket.accept виснет 
:(
    Опции темы
Anton Vatchenko
Дата 5.5.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Итак, есть программа, где в отдельном потоке идет:
Код

            try {
                ServerSocket ss = new ServerSocket(12014);
                while (true) {
                    try {
                        Socket s = ss.accept();
                        s.setSoTimeout(300000);
                        // Создаем новый поток и работаем с ним
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            } catch (IOException e) {
                e.printStackTrace();
            }



До недавнего времени все работало хорошо, но чего-то теперь время от времени accept висит, и через telnet все висит (показывает, что соединение установлено, но на самом деле дальше accept дело не идет). Потом где-то через пару минут (если повезет) accept принимает соединение. Все это работает под Fedora Core 5, и не ясно в чем проблема. Что самое интересное, что на том же сервере стоит программа с таким же циклом, правда на другом порту (12015), и принимает соединения на порядок быстрее. Может кто-то как-то что-то ломает, но загрузка процессора на нуле, как и оперативка...

Добавлено через 3 минуты и 47 секунд
Что самое интересное, уже несколько раз менял номер порта. Буквально на неделю помогает - толпа людей скачивает новый клиент и начинается все снова. Странно. Иногда выдерживает 100-150 людей (соединений-потоков), а вот сейчас еле вытягивает 12 человек. Я точно знаю, что около 50 человек пытаются соединиться, а он принял одного, висит секунд 10, принял другого, подумал секунд 30, еще принял.

Уже и сервер перезапускал - ничего не помогает. Не ясно, то-ли какая-то особенность java (не справляется с большим наплывом людей), то-ли кто-то что-то атакует.


--------------------
user posted image
PM MAIL   Вверх
Vurn
Дата 6.5.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 24.5.2007

Репутация: 1
Всего: 3



Я бы сначала делил на две части возможных проблем
(а) серверсокет глюкает, не принимае коннект
(б) виснет в части создания треда под вновь принятый коннект

Выяснял бы тупо - выключил бы всю логику обработки сокетов (создание тредов и т.п.) и устроил бы стресс-тест по подключениям. Если работает быстро на порту - смотрел бы код обслуживания сокетов, затык в нем. Профайлером бы проверил в каком участке вешается.

Добавлено через 3 минуты и 18 секунд
Еще бы подумал - может передалаться на NIO? Может обвязаться вокруг Apache MINA?
PM MAIL   Вверх
Anton Vatchenko
Дата 6.5.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Так я и указал, что виснет сам accept. Другими словами перед ним и после него выставил System.out.println. Может было бы лучше и NIO, но хотелось бы разобраться.


--------------------
user posted image
PM MAIL   Вверх
COVD
Дата 6.5.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



В NIO тот же самый accept.
Проверьте, закрываются ли ранее созданные соединения.
PM MAIL   Вверх
Anton Vatchenko
Дата 6.5.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Я, можно сказать, стартую сервер с нуля. То есть сделал reboot, сразу запустил два приложения на разные порты. Одно работает, другое - тормозит. Да и то, что тормозит, там во втором потоке другой порт прослушивается - тоже без задержек.


--------------------
user posted image
PM MAIL   Вверх
COVD
Дата 6.5.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Можно анализатором трафика (Wireshark например) посмотреть соединения на проблемный порт извне. Но проще запустить тоже приложение на другом компьютере или на том же компьютере, но на другом порту и подсоединиться извне. Это позволит убедиться, что в самом приложении нет ошибок. Или попробовать подсоединиться с локального клиента, чтобы исключить влияние внешней сети.

Это сообщение отредактировал(а) COVD - 6.5.2009, 19:13
PM MAIL   Вверх
Anton Vatchenko
Дата 7.5.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Да, я писал, что меняю порт, и помогает на некоторое время. Появились подозрения:
1. Больной хостер. Хотя кому надо через некоторое время заставлять порты подвисать как-то...
2. Особые клиенты. Может злоумышленники, может я чего-то не знаю (как в свое время не знал, что write не такая уж быстрая функция). Также что-то слышал о статусе CLOSE ON WAIT или что-то подобное...


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.