garbage collector

D

db_man

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top