![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| DOKA |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 13.8.2006 Репутация: нет Всего: нет |
Добрый день!
Есть многократно вызывающийся код, который отсылает заданный объект на сервер. Но в некоторых случаях при большом потоке данных клиент зависает на строке "m_oos.writeObject(req);". Проверил на стороне сервера tcpdump'ом - действительно данные не приходят на сервер. После зависания, соединение отваливается по таймауту, если подключиться заново, то всё работает нормально до очередного зависания. Пробовал убрать вызов flush() - не помогает. :( Из-за чего такое может возникать?
Это сообщение отредактировал(а) DOKA - 3.7.2007, 19:21 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Попробуй скачать Jakarta commons-io, и сделать так:
А в другом потоке или дебагере переодически читать сколько байт записано в countingOutputStream. Ну на крайняк - threads dump, что показывает? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| DOKA |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 13.8.2006 Репутация: нет Всего: нет |
C CountingOutputStream надо будет попробовать.
Вот дамп отсылающего треда:
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Судя по дампу он встал на отправке данных.
Добавлено через 1 минуту и 20 секунд Есть подозрение, что принимающая сторона не принимает данные. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| DOKA |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 13.8.2006 Репутация: нет Всего: нет |
Вроде все файерволы отключены... tcpdump на сервере не отслеживает пакетов. Потеря их - исключена: компьютеры соединены кросовером напрямую. Попробую ещё проверить не на Windows --> Linux, а на Linux --> Linux, может у винды какая-нибудь своя заморочка. |
|||
|
||||
| COVD |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Я бы сначала посмотрел на доступную приложениям память (клиент и сервер) и как себя ведет gc. Когда он включается (full gc) , то все останавливается.
Что значит "соединение отваливается по таймауту"? Внутренний таймаут сокета около 2 часов. Или у вас есть поток, который закрывает соединение в отсутствии данных? Еще есть особенность записи обьектов в ObjectOutputStream. Обычно в примерах после отправки одного или нескольких обьектов выходной поток закрывается (oos.close()). Вот пример с java.sun :
Если хотите повторно использовать стрим, то вместо close() делайте reset() (а не flush) :
Это сообщение отредактировал(а) COVD - 8.7.2007, 07:08 |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |