Quoting Wenbing Zhao <[EMAIL PROTECTED]>:
thanks Zhao, I will apply this patch. I'm a bit tied up with work these days and
that is why the delay in looking into this as well as other issues.
--dasarath
> I hit exactly the same problem. There is definitely very serious memory
> leaks.
> I did some investigation and found one problem so far. The CallbackRegistry
> does not
> really remove its entries when they are timed out because of a bug in
> CallbackRegistry.java:
>
> timer.schedule(new TimerTask() {
> public void run() {
> callbacks.remove(callback); //<== should be
> callbacks.remove(callback.getID());
> try {
> callback.timeout();
> } catch (TimedOutException e) {
> e.printStackTrace();
> }
> }
> }, timeout);
>
> Also, no one seems to call the remove() method in the CallbackRegistry
> class.
>
> Unfortunately, the memory still leaks very rapidly with this change. I
> instrumented
> ATCoordinatorImpl.java to see if it is ever garbage collected (by adding a
> finalize()
> method). As I had expected, it is never garbage collected. Some other object
> (probably some singleton object) must be holding a reference to all the
> ATCoordinatorImpl objects being created.
>
> I truely hope the development team can pay attention to this problem.
> The memory leak problem kills any hope to use this nice software package
> seriously.
>
> I am using kandula_1 (latest code) with Apache axis and tomcat 5.
>
> Wenbing Zhao
>
> ----- Original Message ----
> From: sergio salvi <[EMAIL PROTECTED]>
> To: [email protected]
> Sent: Tuesday, July 25, 2006 4:45:17 AM
> Subject: Re: memory leakage?
>
> Here's the exception that can be read on the tomcat log file:
>
> [ATCoordinatorImpl] timeout
> ACTIVErg.apache.kandula.coordinator.TimedOutException at
>
org.apache.kandula.coordinator.at.ATCoordinatorImpl.timeout(ATCoordinatorImpl.java:626)
> at
> org.apache.kandula.coordinator.CallbackRegistry$.run(CallbackRegistry.java:62)at
> java.util.TimerThread.mainLoop(Timer.java:52)
> at java.util.TimerThread.run(Timer.java:462)
>
>
> and then:
>
> Exception in thread "Thread-850" java.lang.OutOfMemoryError: Java heap
> space
>
>
>
> and then
>
>
>
>
>
> [CallbackRegistry] registerCallback: timeout= 80000
> AxisFault
> faultCode:
> {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
> faultSubcode:
> faultString: java.lang.OutOfMemoryError: Java heap space; nested exception
> is:
> java.lang.OutOfMemoryError: Java heap space
> faultActor:
> faultNode:
> faultDetail:
> {http://xml.apache.org/axis/}hostname:valerio_sony
> and this is what I get from the client:
> AxisFault
> faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> faultSubcode:
> faultString: java.net.SocketTimeoutException: Read timed out
> faultActor:
> faultNode:
> faultDetail:
> {http://xml.apache.org/axis/}stackTrace:java.net.SocketTimeoutException:
> Read timed out
> at java.net.SocketInputStream.socketRead0(Native Method)
> at java.net.SocketInputStream.read(SocketInputStream.java:29)
> at java.io.BufferedInputStream.fill(BufferedInputStream.java:83)
> at java.io.BufferedInputStream.read(BufferedInputStream.java:20)
> at
>
org.apache.axis.transport.http.HTTPSender.readHeadersFromSocket(HTTPSender.java:583)
> at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:43)
> at
> org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
> at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:8)
> at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
> at org.apache.axis.client.AxisClient.invoke(AxisClient.java:65)
> at org.apache.axis.client.
>
>
> I think that after the server saturates his memory it cannot istanziate new
> transactions.
>
>
> Dasarath Weeratunge <[EMAIL PROTECTED]> ha scritto:
> Quoting sergio salvi :
>
> > The client is programmned to invoke the service 1000 times, but after 120
> > times it gets a timeout exception. honestly, I don't know how to call the
> gc
>
> What is the timeout exception that you get? Could you please post the
> details.
>
> > in the middle. Can you tell me if you know?
>
> System.gc() but be mindful of in which VM you make the call.
>
> Please post your mails to kandula-dev so that they may be archived.
>
> thanks,
> --dasarath
>
>
>
>
> > thanks
> > sergio
> >
> > Dasarath Weeratunge ha scritto:
> > Quoting Valerio Vianello :
> >
> > Is it 120 iterations or 1000? Can you try calling the gc in the middle?
> Also
> >
> > try running it at a slower pace and see whether that makes any difference.
> >
> > thanks,
> > --dasarath
> >
> >
> > > Hi,
> > > But how mush is it the coordinator footprint? I mean, how much memory
> does
> >
> > > it take?
> > > It sounds quite strange that only 120 coordinators can cause an out of
> > > memory. Isn't it?
> > > Thanks,
> > > Valerio
> > >
> > > ----- Original Message -----
> > > From: "Dasarath Weeratunge"
> > > To:
> > > Sent: Sunday, July 23, 2006 4:44 PM
> > > Subject: Re: memory leakage?
> > >
> > >
> > > > Quoting sergio salvi :
> > > >
> > > > Each time you invoke service A, it creates a new transaction. This
> means
> > a
> > >
> > > > new
> > > > coordinator gets created. Once created, a coordinator object is kept
> > > > around
> > > > until it timeouts (the default value is 180 s). This was done so to
> > > > respond to
> > > > some late messages appropriately. We could certainly come up with a
> more
> > > > efficient way to do this. Thus, if you create many activities within a
>
> > > > short
> > > > duration, even if activities end in succession, it may cause their
> > > > coordinators
> > > > to get accumulated. It may be this that is causing the slow down.
> > > >
> > > > thanks,
> > > > --dasarath
> > > >
> > > >
> > > >> I've done a client which invokes a service A whinch in turn create a
> > > >> transaction with 2 services, B and C.
> > > >> The client invokes 1000 times the service A.
> > > >> here is the code of the service A, the one who creates the
> transaction:
> > > >>
> > > >> public class CoordinatoreKandula {
> > > >>
> > > >> private Integer risultato;
> > > >> private Integer ris1;
> > > >> private Integer ris2;
> > > >> static Logger logger;
> > > >> static Logger logger2;
> > > >>
> > > >> /** Creates a new instance of CoordinatoreKandula */
> > > >> public CoordinatoreKandula() {
> > > >> risultato = null;
> > > >> ris1 = null;
> > > >> ris2 = null;
> > > >> logger2 = Logger.getLogger("Valerio");
> > > >> logger = Logger.getLogger("CoordinatoreKandula");
> > > >> PropertyConfigurator.configure("C:/Programmi/Apache Software
> > > >> Foundation/Tomcat
> 5.5/webapps/axis/WEB-INF/classes/log4j.properties");
> > > >> logger2.info("creato CoordinatoreKandula");
> > > >> }
> > > >> public int risolviEspressione(int tipo, int a, int b, int c, int d)
> > >
> > > >> {
> > > >>
> > > >>
> > > >> TransactionManagerImpl wstm =
> > > >> TransactionManagerImpl.getInstance();
> > > >>
> > > >> String endpointSomma = new
> > > >> String("http://localhost:8080/axis/services/ServizioSomma");
> > > >> String endpointProdotto = new
> > > >> String("http://localhost:8080/axis/services/ServizioProdotto");
> > > >>
> > > >> //espressione tipo 1 ==> (a + b) * (c + d)
> > > >> if (tipo==1) {
> > > >>
> > > >> int risTipo1;
> > > >>
> > > >> logger.info("Operazione richiesta : (" + a + " + " + b + ") *
> > >
> > > >> ("
> > > >> + c + " + " + d + ")");
> > > >>
> > > >> try {
> > > >> wstm.begin();
> > > >> }catch(RemoteException e) {
> > > >> logger.info("Errore nel begin ");
> > > >> e.printStackTrace();
> > > >> }
> > > >>
> > > >> Service service = new Service();
> > > >> Call call = null;
> > > >>
> > > >> try {
> > > >> call = (Call) service.createCall();
> > > >> }catch(javax.xml.rpc.ServiceException e) {
> > > >> logger.info("Errore nel creare oggetto call");
> > > >> }
> > > >>
> > > >> //call per (a + b)
> > > >> call.setTargetEndpointAddress(endpointSomma);
> > > >> call.setOperationName("somma");
> > > >> call.setUseSOAPAction(true);
> > > >>
> > > >> call.setSOAPActionURI
> > > > ("http://localhost:8080/axis/services/kandulaServizioSomma#somma");
> > > >>
> > > >> call.addParameter( "op1", XMLType.XSD_INT, ParameterMode.IN);
> > > >> call.addParameter( "op2", XMLType.XSD_INT, ParameterMode.IN);
> > > >> call.setReturnType( XMLType.XSD_INT );
> > > >> Integer op1 = new Integer(a);
> > > >> Integer op2 = new Integer(b);
> > > >>
> > > >>
> > > >> try {
> > > >> ris1 = (Integer) call.invoke( new Object [] {op1,op2});
> > > >> }catch(java.rmi.RemoteException e) {
> > > >> System.err.println("catch CoordinatoreKandulaInvoke1->
> > > >> " +
> > > >> e);
> > > >> e.printStackTrace();
> > > >> }
> > > >>
> > > >> //call2 per (c+d)
> > > >> Call call2 = null;
> > > >>
> > > >> try {
> > > >> call2 = (Call) service.createCall();
> > > >> }catch(javax.xml.rpc.ServiceException e) {
> > > >> logger.info("Errore nel creare oggetto call2");
> > > >> }
> > > >>
> > > >> call2.setTargetEndpointAddress(endpointSomma);
> > > >> call2.setOperationName("somma");
> > > >> call2.setUseSOAPAction(true);
> > > >>
> > > >> call2.setSOAPActionURI
> > > > ("http://localhost:8080/axis/services/kandulaServizioSomma#somma");
> > > >>
> > > >> call2.addParameter( "op3", XMLType.XSD_INT,
> > > >> ParameterMode.IN);
> > > >> call2.addParameter( "op4", XMLType.XSD_INT,
> > > >> ParameterMode.IN);
> > > >> call2.setReturnType( XMLType.XSD_INT );
> > > >> Integer op3 = new Integer(c);
> > > >> Integer op4 = new Integer(d);
> > > >>
> > > >> try {
> > > >> ris2 = (Integer) call2.invoke( new Object [] {op3,op4});
> > > >>
> > > >> }catch(java.rmi.RemoteException e) {
> > > >> System.err.println("catch CoordinatoreKandulaInvoke2->
> > > >> " +
> > > >> e);
> > > >> e.printStackTrace();
> > > >> }
> > > >>
> > > >> //call3 per (a + b) * (c + d)
> > > >> Call call3 = null;
> > > >>
> > > >> try {
> > > >> call3 = (Call) service.createCall();
> > > >> }catch(javax.xml.rpc.ServiceException e) {
> > > >> logger.info("Errore nel creare oggetto call3");
> > > >> }
> > > >>
> > > >> call3.setTargetEndpointAddress(endpointProdotto);
> > > >> call3.setOperationName("prodotto");
> > > >> call3.setUseSOAPAction(true);
> > > >>
> > > >> call3.setSOAPActionURI
> > > >
> > ("http://localhost:8080/axis/services/kandulaServizioProdotto#prodotto");
> > > >>
> > > >> call3.addParameter( "ris1", XMLType.XSD_INT,
> > > >> ParameterMode.IN);
> > > >> call3.addParameter( "ris2", XMLType.XSD_INT,
> > > >> ParameterMode.IN);
> > > >> call3.setReturnType( XMLType.XSD_INT );
> > > >> try {
> > > >> risultato = (Integer) call3.invoke( new Object []
> > > >> {ris1,ris2});
> > > >>
> > > >> }catch(java.rmi.RemoteException e) {
> > > >> System.err.println("catch CoordinatoreKandulaInvoke3->
> > > >> " +
> > > >> e);
> > > >> e.printStackTrace();
> > > >> }
> > > >>
> > > >>
> > > >> try {
> > > >> wstm.commit();
> > > >>
> > > >> }catch(RemoteException e) {
> > > >> logger.info("Errore nel commit ");
> > > >> e.printStackTrace();
> > > >> }
> > > >>
> > > >> logger.info("(" + a + " + " + b + ") * (" + c + " + " + d +
> > > >> ") =
> > > >> " + risultato.intValue());
> > > >> }
> > > >>
> > > >> else logger.info("input sbagliato");
> > > >>
> > > >> return risultato.intValue();
> > > >> }
> > > >> }
> > > >>
> > > >>
> > > >> Dasarath Weeratunge ha scritto:
> > > >> Quoting sergio salvi :
> > > >>
> > > >> are you creating a new transaction each time? if you could please post
>
> > > >> your
> > > >> client code so that we can get a better idea about what your client
> is
> > > >> doing.
> > > >>
> > > >> thanks,
> > > >> --dasarath
> > > >>
> > > >>
> > > >>
> > > >>
> > > >> Chiacchiera con i tuoi amici in tempo reale!
> > > >> http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com
> > > >
> > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > >
> > > Chiacchiera con i tuoi amici in tempo reale!
> > > http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> > Chiacchiera con i tuoi amici in tempo reale!
> > http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> Chiacchiera con i tuoi amici in tempo reale!
> http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]