Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> java

java

From: hopehope_123 <hopehope_123_at_yahoo.com>
Date: 17 Dec 2006 03:14:51 -0800
Message-ID: <1166354091.180027.3030@f1g2000cwa.googlegroups.com>


Hi ,

We use oracle application server and have some pausing problems inside the java vm. The problem shows itself as pausings of executions , when clients start to get late responses ( here lat e means < 4 sec. ) , i see more than 10 garbage collector operations . The client applications are web services and do database queries. The java process ( the os is sun solaris) , according to the prstat , has > 1000 threads inside , and during the garbage collectiong phase , consumes more than 60% cpu time. ( the server has 2 cpus - 2 gb. ram) The java process uses the following parameters:

What i think is , the reason of the suspensions is garbage collector activity.

In order to decrease the time that cause pausing , i either increase the virtual memory allocated by the java process , or change the garbage collector method. Before adding up mor memory to teh system , i want to be sure the effect of changing garbag ecollector methodology.

The gc used here is serial garbage collector , in order to speed it up , the documents say that parallel garbage collector is used.

I write a small test program . This program creates 1000 threads . Each thread creates objects by using new in a loop , and this causes the garbage collector runs heavily in order to clean teh garbages. And i run the program bu using different garbage collectors but unfortunately , i dont see great difference beetween serial and parallel gc ,and serial gc is faster.

Why does this so?

Serial gc:

 timex java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-Xmx450m -Xms450m -XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime -XX:+UseSerialGC test > test1

real       23.48
user     3:26.67
sys         4.33


parallel gc:

 timex java -server -verbose:gc -XX:+PrintGCDetails
-XX:+PrintGCTimeStamps -Xmx450m -Xms450m
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime -XX:+UseParallelGC test > test1

real       24.35
user     3:24.68
sys        30.95



and here is the test code:

(I run this test on a bigger box , 24gb.ram , 6 dual core solaris cpus )

>cat test.java

import java.util.*;
import java.net.*;
import java.io.*;


 class testTh extends Thread
{

   public int val ;
  public testTh ( int pval) { val=pval; }     public void run() {

	   int i=0;
	String s  =new String("aaaa");
 	 boolean flag=true;
 	  while (flag)
	 {
		 for (int j=0;j<100000;j++) {
	       		s = new String("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
		}
	    i++;
	    if (i>10) flag=false;
	}
	}

}

public class test
{
  public void dene() {

	for ( int j=0;j<1000;j++)
 		(new testTh(j)).start();

	   }

  public static void main(String args[])    {
        test t = new test();
        t.dene();

}
}

Kind Regards,
hope Received on Sun Dec 17 2006 - 05:14:51 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US