[jboss-user] [JBoss Remoting Users] - Re: JBoss RMI + Serialization performance issue

ravi_eze do-not-reply at jboss.com
Thu Oct 22 07:53:18 EDT 2009


hi,

Here's a new test. Even here the jboss socket comm (with/ without jboss serialization) does badly.The machines are the same linux boxes and no other process is runnin on it. 

First we ran the test for 1000 times(say this as a batch) and  15 such batches. Took the average of last 12 of them(considering jvm warmups etc). We did this for Java RMI with raw_socket (or javaRMI with java serialization) Then we did the same with Jboss RMI over socket (socket transport with jboss serialization). We did this as the same process and as a different processes. In all the cases socket transport with java serialization took abt 35% more time than java RMI with java serialization.

Now considering jboss RMI with jboss serialization it takes more than 10 times w.r.t. java RMI with java serialization. I am not sure where i am doing wrong. below is the code

public class Person implements Serializable {
  | 	int						id;
  | 	private Vector<Person>	personVector	= null;
  | 
  |         //HERE WE POPULATE A TREE WITH A GIVEN DEPTH AND BREADTH.
  | 	public Person populateDepth(Person person, int currentDepth, int breadth, int finalDepth) {
  | 		if (currentDepth >= finalDepth) {
  | 			return person;
  | 		} else {
  | 			person.personVector = new Vector<Person>(breadth);
  | 			this.id = this.personID++;
  | 			for (int i = 0; i < breadth; i++) {
  | 				Person p = new Person();
  | 				person.personVector.add(p);
  | 				populateDepth(p, currentDepth + 1, breadth, finalDepth);
  | 			}
  | 		}
  | 		return person;
  | 	}
  | 
  |        //DOES THE JAVA SERIALIZATION
  | 	public byte[] getJavaBytes() throws Exception {
  | 		ByteArrayOutputStream st = new ByteArrayOutputStream(64 * 1024);
  | 		ObjectOutputStream os = new ObjectOutputStream(st);
  | 		os.writeObject(this);
  | 		byte[] s = st.toByteArray();
  | 		return s;
  | 	}
  | 
  |         //DOES JBOSS SERIALIZATION.
  | 	public byte[] getJbossBytes() throws Exception {
  | 		ByteArrayOutputStream st = new ByteArrayOutputStream(64 * 1024);
  | 		ObjectOutputStream os = new JBossObjectOutputStream(st);
  | 		os.writeObject(this);
  | 		byte[] s = st.toByteArray();
  | 		return s;
  | 	}
  | 
  | //STRESS CODE
  | public static long stress(IRemote playerInterface, Person player, int hits) throws Exception {
  | 		long startingTime;
  | 		long endTime;
  | 		startingTime = System.currentTimeMillis();
  | 		for (int i = 0; i < hits; i++) {
  | 			Person result = playerInterface.execute(player);
  | 		}
  | 		endTime = System.currentTimeMillis();
  | 		return endTime - startingTime;
  | 	}
  | 
  | }
  | 
  | 

Also we see Jboss serialization to produce 40% more bytes than java serialization for the above prog.


Cleint prog is as follows


  | uri= "socket://10.1.131.96:8092?serializationtype=jboss";
  | int depth=15;
  | int breadth =2;
  | remote = (IRemote) TransporterClient.createTransporterClient(uri, IRemote.class);
  | Person p = new Person();
  | p = p.populateDepth(p, 0, breadth, depth);
  | return Person.stress(remote, p, hits);
  | 
  | 

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4261694#4261694

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4261694



More information about the jboss-user mailing list