powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / RMI фигасетормоза!!!
19 сообщений из 19, страница 1 из 1
RMI фигасетормоза!!!
    #34836483
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сетка сто мегабит. Классы маленькие, тестовые. Два компа. Когда делаю всё на локальном на скорость не жалуюсь.

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

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

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836538
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потрассируй свой код. Может ты теряешь время на каком-то пустяке вроде разрешения DNS или что-то в этом роде.
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836547
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin
Скажите, оно так нормально чтоли?
Нет. Смотри у себя баги.
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836582
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПотрассируй свой код. Может ты теряешь время на каком-то пустяке вроде разрешения DNS или что-то в этом роде.
Врядли. По айпи лазил.
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836604
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько оптимально используется сеть? К примеру если ты вызовешь 1500 раз SendByte(int byteVal) и один раз SendVector1500Bytes(char[] vect), то по смыслу, вроде-бы передал 1,5 К информации, но с точки зрения TCP протокола в первом случае канал пропустил 3000 IP пакетов, а во втором случае - всего два.
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836616
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите, хотя врядли это что-то даст.
В комментах к строкам указано время исполнения в миллисекундах. Первое на одной машине, второе, когда клиент на другой:
Код: 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
RMI фигасетормоза!!!
    #34836624
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... получается, что тормозит у нас javax.naming.Context.lookup("rmi://" + server + "/hi");

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

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

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836642
anonimouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. попробуйте явно указать порт и сервер указывать по ip
2. покажите серверный код
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836643
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
RMI фигасетормоза!!!
    #34836659
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
RMI фигасетормоза!!!
    #34836660
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не думаю, что если захардкожу хост это поможет... В любом случае такие параметры потом будут из конфигов читаться.

Сервер:
Код: 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
RMI фигасетормоза!!!
    #34836671
Олег Гапон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю на секюрити и тормозит...или вообще вылетает...
Где то я на такое уже нарывался...когда поправили...то рабтало как автомат...Калашникова..
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836672
Олег Гапон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам RMI тут не причём
...
Рейтинг: 0 / 0
RMI фигасетормоза!!!
    #34836673
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Олег ГапонДумаю на секюрити и тормозит...или вообще вылетает...
Где то я на такое уже нарывался...когда поправили...то рабтало как автомат...Калашникова..

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

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

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


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