Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / RMI фигасетормоза!!! / 19 сообщений из 19, страница 1 из 1
29.09.2007, 17:26:52
    #34836483
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Сетка сто мегабит. Классы маленькие, тестовые. Два компа. Когда делаю всё на локальном на скорость не жалуюсь.

Но если клиент на другом компе, то до заветного сообщения об успешном получении удалённого объекта проходит минута, а то и более.

Скажите, оно так нормально чтоли? Я на RMI хотел один проект сделать. Тоесть использовать его там. А соединение там будет намного хуже. К тому же через Интернет. И объекты совсем немаленькие передаваться будут.

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
29.09.2007, 19:25:37
    #34836538
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Потрассируй свой код. Может ты теряешь время на каком-то пустяке вроде разрешения DNS или что-то в этом роде.
...
Рейтинг: 0 / 0
29.09.2007, 19:40:59
    #34836547
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Sarin
Скажите, оно так нормально чтоли?
Нет. Смотри у себя баги.
...
Рейтинг: 0 / 0
29.09.2007, 20:22:43
    #34836582
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
maytonПотрассируй свой код. Может ты теряешь время на каком-то пустяке вроде разрешения DNS или что-то в этом роде.
Врядли. По айпи лазил.
...
Рейтинг: 0 / 0
29.09.2007, 20:54:27
    #34836604
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Насколько оптимально используется сеть? К примеру если ты вызовешь 1500 раз SendByte(int byteVal) и один раз SendVector1500Bytes(char[] vect), то по смыслу, вроде-бы передал 1,5 К информации, но с точки зрения TCP протокола в первом случае канал пропустил 3000 IP пакетов, а во втором случае - всего два.
...
Рейтинг: 0 / 0
29.09.2007, 21:14:23
    #34836616
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Посмотрите, хотя врядли это что-то даст.
В комментах к строкам указано время исполнения в миллисекундах. Первое на одной машине, второе, когда клиент на другой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
 package  rmiclient;

 import  java.rmi.RMISecurityManager;
 import  java.util.Date;
 import  javax.naming.Context;
 import  javax.naming.InitialContext;
 import  javax.naming.NameClassPair;
 import  javax.naming.NamingEnumeration;
 import  javax.swing.JOptionPane;
 import  product.Product;

/**
 *
 * @author sarin2.0
 */
 public   class  Main {
	 public   static   void  main(String[] args) {
		System.out.println(";");
		String policy = JOptionPane.showInputDialog("Enter path to policy file", "client.policy");
		System.setProperty("java.security.policy", policy);
		System.setSecurityManager( new  RMISecurityManager());
		
		 try  {
			System.out.println( new  Date().getTime());
			Context nc =  new  InitialContext(); // 15 15
			System.out.println( new  Date().getTime());
			String server = JOptionPane.showInputDialog("Enter server adress");
			System.out.println( new  Date().getTime());
			Product p = (Product)nc.lookup("rmi://" + server + "/hi"); // 350 90000
			System.out.println( new  Date().getTime());
			JOptionPane.showMessageDialog( null , p.getDesc());
			System.out.println( new  Date().getTime());
		}  catch  (Exception e) {
			e.printStackTrace();
		}		
	}	
}

По этой же сети с этой же клиентской машине лазил по HTTP на томкат, стоящий на той же машине, где и сервер RMI. Адресация таже самая, по IP. Никакой задержки не видел.
...
Рейтинг: 0 / 0
29.09.2007, 21:30:54
    #34836624
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Хм... получается, что тормозит у нас javax.naming.Context.lookup("rmi://" + server + "/hi");

А может-быть этот лукап только первый раз медлителен? Попробуйте вызвать его 5 - 10 раз, не выходя из прогаммы. Может быть для последующих вызовов, отклик будет очень быстрый?
...
Рейтинг: 0 / 0
29.09.2007, 21:36:12
    #34836629
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
maytonХм... получается, что тормозит у нас javax.naming.Context.lookup("rmi://" + server + "/hi");

А может-быть этот лукап только первый раз медлителен? Попробуйте вызвать его 5 - 10 раз, не выходя из прогаммы. Может быть для последующих вызовов, отклик будет очень быстрый?
Конечно я пробовал. Сократилось до 88600 миллисекунд:((
...
Рейтинг: 0 / 0
29.09.2007, 21:39:25
    #34836632
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Есть надежда, что остальная работы с сервером столько проблем не вызовет. Тоесть через лукап получается корневой объект, а дальше всё через него. Но проблема в том, что даже для первого вызова 90 секунд излишне много. Человек, работающий с этой программой будет сидеть с ноутбуком в глухом лесу, или на льдине, или вообще, Бог знает где, Инет у него будет по GPRS, а данные надо будет отсылать очень быстро, потомучто засиживаться на одном месте ему крайне не рекомендуется.

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
29.09.2007, 21:52:25
    #34836642
anonimouse
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
1. попробуйте явно указать порт и сервер указывать по ip
2. покажите серверный код
...
Рейтинг: 0 / 0
29.09.2007, 21:53:09
    #34836643
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
1) Вот классический пример использования RMI из учебников по Java. Он не тормозит. В этом я на 100% уверен, потому-что брал его за основу своих разработок. Правда он использует более примитивную модель безопасности (или вообще её не использует).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package example.hello;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {

    private Client() {}

    public static void main(String[] args) {

	String host = (args.length <  1 ) ? null : args[ 0 ];
	try {
	    Registry registry = LocateRegistry.getRegistry(host);
	    Hello stub = (Hello) registry.lookup("Hello");
	    String response = stub.sayHello();
	    System.out.println("response: " + response);
	} catch (Exception e) {
	    System.err.println("Client exception: " + e.toString());
	    e.printStackTrace();
	}
    }
}

Попробуйте "плавно" приблизить свою постановку к этому примеру.

2) Всё таки попробуйте толкнуть команду

java -Xrunhprof:heap=sites,cpu=samples,depth=10,monitor=y,thread=y,doe=y <classname>

Профилятор развернёт стек и мы увидем полный путь к методу который жрет время внутри lookup-a.
...
Рейтинг: 0 / 0
29.09.2007, 22:29:44
    #34836659
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
mayton
Попробуйте "плавно" приблизить свою постановку к этому примеру.

А как это Вы без безопасности обходитесь? Попробую, обязательно. То, что написано у меня списано, с изменениями, с Хорстмана.

Выполнение той команды дало такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
C:\Documents and Settings\VIKA>"c:\Program Files\Java\jre1.5.0_06\bin\java.exe"
-Xrunhprof:heap=sites,cpu=samples,depth= 10 ,monitor=y,thread=y,doe=y -jar d:\RMIC
lient.jar >> d:\rmi2.log
Exception in thread "main" java.lang.ExceptionInInitializerError
        at sun.reflect.GeneratedSerializationConstructorAccessor3.newInstance(Un
known Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.io.ObjectStreamClass.newInstance(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
        at com.sun.jndi.toolkit.url.GenericURLContext.lookup(Unknown Source)
        at javax.naming.InitialContext.lookup(Unknown Source)
        at rmiclient.Main.main(Main.java: 38 )
Caused by: java.security.AccessControlException: access denied (java.lang.Runtim
ePermission accessClassInPackage.sun.tools.hprof)
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPackageAccess(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at $Proxy0.<clinit>(Unknown Source)
        ...  11  more
Dumping contended monitor usage ... allocation sites ... CPU usage by sampling r
unning threads ... done.
...
Рейтинг: 0 / 0
29.09.2007, 22:30:31
    #34836660
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Не думаю, что если захардкожу хост это поможет... В любом случае такие параметры потом будут из конфигов читаться.

Сервер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 package  rmiserver;

 import  java.rmi.registry.LocateRegistry;
 import  javax.naming.Context;
 import  javax.naming.InitialContext;

/**
 *
 * @author sarin2.0
 */
 public   class  Main {
	
	/** Creates a new instance of Main */
	 public  Main() {
	}
	
	/**
	 * @param args the command line arguments
	 */
	 public   static   void  main(String[] args) {
		// TODO code application logic here
		 try  {
			LocateRegistry.createRegistry( 1099 );
			ProductImpl p1 =  new  ProductImpl("Hi");
			Context nc =  new  InitialContext();
			nc.bind("rmi:hi", p1);
			//nc.bind("/app/test", "test");
		}  catch  (Exception e) {
			e.printStackTrace();
		}		
	}	
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 package  rmiserver;

 import  java.rmi.RemoteException;
 import  java.rmi.server.UnicastRemoteObject;
 import  product.Product;

/**
 *
 * @author sarin2.0
 */
 public   class  ProductImpl  extends  UnicastRemoteObject  implements  Product{
	
	/** Creates a new instance of ProductImpl */
	 public  ProductImpl(String desc)  throws  RemoteException{
		 this .desc = desc;
	}

	 public  String getDesc()  throws  RemoteException {
		System.out.println("I'm called");
		 return   this .desc;
	}
	
	 private  String desc = "";
	
}
Интерфейс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 package  product;

 import  java.rmi.Remote;
 import  java.rmi.RemoteException;

/**
 *
 * @author sarin2.0
 */
 public   interface  Product  extends  Remote{
	String getDesc()  throws  RemoteException;
}

...
Рейтинг: 0 / 0
29.09.2007, 23:18:21
    #34836671
Олег Гапон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Думаю на секюрити и тормозит...или вообще вылетает...
Где то я на такое уже нарывался...когда поправили...то рабтало как автомат...Калашникова..
...
Рейтинг: 0 / 0
29.09.2007, 23:18:47
    #34836672
Олег Гапон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Сам RMI тут не причём
...
Рейтинг: 0 / 0
29.09.2007, 23:21:22
    #34836673
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Олег ГапонДумаю на секюрити и тормозит...или вообще вылетает...
Где то я на такое уже нарывался...когда поправили...то рабтало как автомат...Калашникова..

У меня тоже возникло подозрение, что дело в секьюрити. Но как же без секьюрити то жить?..
...
Рейтинг: 0 / 0
29.09.2007, 23:27:34
    #34836675
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Возможно проблема в том, что в Java 5 используется динамическая генерация стабов, что должно отрицательно сказываться на быстродействии lookup, только тогда не понятно почему при работе на одной машине все работает быстро?
...
Рейтинг: 0 / 0
29.09.2007, 23:29:08
    #34836677
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
SarinУ меня тоже возникло подозрение, что дело в секьюрити. Но как же без секьюрити то жить?..
- по крайней мере можно легко проверить, отключив секьюрити менеджер, а то может и не в нем дело ...
...
Рейтинг: 0 / 0
29.09.2007, 23:54:59
    #34836695
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI фигасетормоза!!!
Отключение секьюрити помогло.

Всем большое спасибо.

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / RMI фигасетормоза!!! / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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