powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / RMI ошибка на Amazon EC2
8 сообщений из 8, страница 1 из 1
RMI ошибка на Amazon EC2
    #39135802
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архитектура такая:

Есть Web-сервер на Tomcat который должен принять запрос от клиента (назовем gui1), потом по RMI он обращается к другой JVM (назовем Host) которая подготавливает данные и возвращает их Web-серверу, который форматирует HTML.

Сейчас все стоит на одной бесплатной машине в Amazon EC2, в дальнейшем, будет на разных машинах. Обращение происходить по Временному IP instance Amazon машины.

Периодически (достаточно часто((( ), в логах Tomcat такая бяка:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dec 22, 2015 2:23:25 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [gui1] in context with path [/my] threw exception
java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
	java.io.EOFException
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:229)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)
	at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
	at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
	at com.sun.proxy.$Proxy9.doRequests(Unknown Source)
	at my.SearcherRmiHelper.doRequests(SearcherRmiHelper.java:29)
	at my.gui1.doGet(gui1.java:199)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
<стек Apache порезан как не важный>
Caused by: java.io.EOFException
	at java.io.DataInputStream.readByte(DataInputStream.java:267)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:215)
	... 31 more

В логах на стороне RMI-host'а - все чисто. Стоит отладочная печать тупо через System.out.println, все нормально. Вошли в метод, обработали, вернули результат.

А tomcat при unmarshaling результата почему-то на пустом месте ловит EOF (((

Данных за один вызов сейчас передается достаточно много (оценочно около 2 Mb). Сереализация чисто стандартная, ничего в классах не переопределял (в классах только простые типы данных: String,int и массивы)

Что это за фигня? Как ее лечить?
...
Рейтинг: 0 / 0
RMI ошибка на Amazon EC2
    #39135839
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
RMI ошибка на Amazon EC2
    #39135846
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как ошибка отваливается в самом начале чтения, то запрос до сервера и не доходит. Обрубается кем-то по дороге. Надо разобраться кем именно.
...
Рейтинг: 0 / 0
RMI ошибка на Amazon EC2
    #39135879
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТак как ошибка отваливается в самом начале чтения, то запрос до сервера и не доходит. Обрубается кем-то по дороге. Надо разобраться кем именно.
Откуда ощущение, что "в начале" и "не доходит" ?

У меня ощущение, что доходит и отваливается "в конце", при попытке прочитать готовый результат (как минимум название ошибки UnmarshalException)

BlazkowiczПроверить наличие SecurityManager, посмотреть в -Djava.security.debug=access,failure.

Нафига?
Код примерно такой:

Код: java
1.
2.
3.
4.
5.
for ( int i<0; i<numOfPacket; i++ ) {
   out.println( "doRequests<br/>");
   host.doRequests(....);
   out.println( "Ok. "+i+" of "+ numPacket + "<br/>");
}


Цикл начинается, обрабатывает первые N запросов, на каком-то ИНОГДА падает. В следующий (предыдущий) раз - все нормально (на тех же параметрах).
...
Рейтинг: 0 / 0
RMI ошибка на Amazon EC2
    #39135884
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока, кроме как: ловить ошибку и самому перепосылать запрос, ничего в голову не приходить. Но это как-то совсем топорно выглядит (((
...
Рейтинг: 0 / 0
RMI ошибка на Amazon EC2
    #39135982
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevОткуда ощущение, что "в начале" и "не доходит" ?

По стеку. Начинается запуск метода. В executeCall у connection берется InputStream и начинается чтение заголовка. Но stream с ходу возвращает отрицательное значение - индикатор конца.

Leonid KudryavtsevУ меня ощущение, что доходит и отваливается "в конце", при попытке прочитать готовый результат (как минимум название ошибки UnmarshalException)

Посмотри StreamRemoteCall.executeCall
http://www.docjar.com/html/api/sun/rmi/transport/StreamRemoteCall.java.html

Leonid KudryavtsevКод примерно такой:
Код: java
1.
2.
3.
4.
5.
for ( int i<0; i<numOfPacket; i++ ) {
   out.println( "doRequests<br/>");
   host.doRequests(....);
   out.println( "Ok. "+i+" of "+ numPacket + "<br/>");
}


Цикл начинается, обрабатывает первые N запросов, на каком-то ИНОГДА падает. В следующий (предыдущий) раз - все нормально (на тех же параметрах).
host шарится между потоками?
...
Рейтинг: 0 / 0
RMI ошибка на Amazon EC2
    #39136007
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczhost шарится между потоками?

На стороне клиента - нет

На стороне сервера, клиенты сейчас "прицеплены" к одному объекту. Т.ч., теоретически, в момент обращения, он может быть в synchronized блоке и не отвечать.

Но здесь мне не понятно, как в RMI такие вещи нужно делать корректно. Т.е. я планирую в RMI выдать во внешний мир фабрику, а дальше каждый клиент через нее будет получать "свой" объект. Понятно, что время "занятости" уменьшится и, если ошибка связана с коллизиями, вероятность словить ошибку также уменьшится, но ведь не исчезнет совсем. Все равно, остается не нулевая вероятность обращения в один момент к самой фабрике. IMHO
...
Рейтинг: 0 / 0
RMI ошибка на Amazon EC2
    #39136270
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На стороне сервера вроде то же все законно (((

Сама ф-ция блоков synchronized вообще не содержит, т.к. вроде реетерабельна (все переменные локальные):

1) создает и запускает поток обработки, передавая туда принятые параметры;
2) ждет завершения потока;
3) выходит из функции

На стороне сервера ошибок нет, ошибка только на клиенте (Tomcat) иногда появляется. Сервер не подвисает. Последующие запросы/обращения идут нормально.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / RMI ошибка на Amazon EC2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]