ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ankurgur <ankur....@tcs.com>
Subject Re: Memeory leak in com.iBatis.sqlmap.engine.impl.SqlMapClientImpl class
Date Sun, 14 Jun 2009 10:39:11 GMT

Thnks Kai,

Let me have a look at it.

Regards,
Ankur


Kai Grabfelder-3 wrote:
> 
> Hm I guess without some further information about your setup & environment
> it is hard to tell. imho there is
> only one known memory leak in 2.3.4 and that only affects redeployment of
> the app. Please describe your setup
> in more detail.
> 
> I think you should have a look at the heap dump by yourself using for
> example eclipse MAT - a great tool for
> such tasks. With the heap dump you should be able to tell which classes
> are not garbage collected and which
> other classes are referencing them.
> 
> cheers
> 
> Kai
> 
> 
> 
> --- Original Nachricht ---
> Absender: ankurgur
> Datum: 13.06.2009 11:51
>> Hi Kai,
>> 
>> Thanks a ton for the reply. Yes we already have the singleton pattern
>> implementation for our sqlmap client :-((.
>> 
>> Any other ideas are most welcome.
>> 
>> Regards,
>> Ankur
>> 
>> 
>> Kai Grabfelder-3 wrote:
>>> 
>>> So are you already using a singleton pattern for the sqlmap client? Or
>>> do
>>> you have nothing in common with the
>>> setup described in the cited text below?
>>> 
>>> Best Regards
>>> 
>>> Kai
>>> 
>>> 
>>> --- Original Nachricht ---
>>> Absender: ankurgur
>>> Datum: 12.06.2009 12:58
>>>> Hi there,
>>>> 
>>>> I am in dire need of help regarding Memory leak problem i am facing in
>>>> my
>>>> application. 
>>>> After analysis it seems there is some problem with the way we are using
>>>> iBATIS in our application.
>>>> Actually we are uploading huge amount of data (around 50k) into DB
>>>> through
>>>> our application using transaction management and batch insertion and
>>>> updation facility provided by iBATIS.
>>>> 
>>>> Our deployment environment has the max JVM heap as 458Mb available for
>>>> use.
>>>> After our application reaches to say around 30k records the performance
>>>> starts degrading with heap utilization getting to a very high limit.
>>>> Sometimes it starts throwing OutOfMemoryException and the system goes
>>>> down. 
>>>> 
>>>> The heap analyzing team came up with this Comment 
>>>> 
>>>> "Looks like, the memory leak is coming from iBatis objects being stored
>>>> inside the
>>>> com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread."
>>>> 
>>>> Can anybody please help in what general precautions we can take to
>>>> avoid
>>>> this situation created by our iBATIS implementation.
>>>> 
>>>> pooven wrote:
>>>>> 
>>>>> Jeff,
>>>>> 
>>>>> Thanks for your reply. Really what you have replied is very helpful.
>>>>> 
>>>>> Here with I have attached my code as well as the some screeen shots of
>>>>> the
>>>>> heap analyser.
>>>>> 
>>>>> In our code each action class we called the 
>>>>> 
>>>>> Reader reader = Resources.getResourceAsReader("abatorConfig.xml");
>>>>> sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
>>>>> 
>>>>> This is blender mistake I believe.
>>>>> 
>>>>> Kindly correct me the following set of code to call the above set of
>>>>> code
>>>>> with use of singleton pattern.
>>>>> 
>>>>> In all the 183 action classes the code is same , now only I realized
>>>>> the
>>>>> problem. For simultaneous access of reports from different users is it
>>>>> correct to have the following code to call the 
>>>>> SqlMapClientBuilder.buildSqlMapClient(reader); each time
>>>>> 
>>>>> 
>>>>> public class SqlMapClientBuilderSingleton{
>>>>>       private static final SqlMapClient sqlMap;
>>>>>        static {
>>>>>                 try {
>>>>>                      Reader reader =
>>>>> Resources.getResourceAsReader("abatorConfig.xml");
>>>>>                     sqlMap = 
>>>>> SqlMapClientBuilder.buildSqlMapClient(reader);
>>>>>                     } catch (Exception e) {
>>>>>                       e.printStackTrace();
>>>>>                      throw new RuntimeException ("SqlMap
>>>>> initialisation
>>>>> Error: " + e);
>>>>>                    }
>>>>>               }
>>>>>               public static SqlMapClient getSqlMapInstance () {
>>>>>                 return sqlMap;
>>>>>                }
>>>>>   
>>>>>        }
>>>>> 
>>>>> SqlMapClientBuilderSingleton
>>>>> 
>>>>> Then when I need it in the code I can use this way
>>>>> 
>>>>>               SqlMapClient
>>>>> sqlMapper=SqlMapClientBuilderSingleton.getSqlMapInstance ();
>>>>> 
>>>>> 
>>>>> 
>>>>> Is the above said way is right ? if you have any correction in the
>>>>> above
>>>>> code  pls let me know , we are not using the spring FrameWork hence
>>>>> pls
>>>>> advise me he best way to call the SqlMapClient each time in the
>>>>> action. 
>>>>> do we need to call the sqlMapper.flushDataCache() wherever is 
>>>>> necessary
>>>>> for flushing the dataCache , where would be the closing all would be
>>>>> done.
>>>>> 
>>>>> I am not able to find any easy examples of how to go about with the
>>>>> iBatis.
>>>>> 
>>>>> 
>>>>> Thanks for your efforts and time.
>>>>> 
>>>>> Thanks once again
>>>>> 
>>>>> Poovendran
>>>>> 
>>>>> 
>>>>> 
>>>>> Jeff Butler-2 wrote:
>>>>>> 
>>>>>> I just took a closer look at this.  What you are showing is the
>>>>>> object
>>>>>> tree
>>>>>> related to the SqlMapClient - which is very large in your case. 
That
>>>>>> probably means you have a lot of mapped statements (perhaps 8208
of
>>>>>> them).
>>>>>> That should be ok - because this object tree should only occur one
>>>>>> time
>>>>>> and
>>>>>> should not change once it is built.
>>>>>> 
>>>>>> Are you seeing that this tree is built and destroyed over and over
>>>>>> again?
>>>>>> Or are there multiple instances of this tree?  This is a common
>>>>>> misuse
>>>>>> of
>>>>>> iBATIS.  You should build the SqlMapClient one and only one time.

>>>>>> You
>>>>>> should keep it for the life of the application somewhere (like a
>>>>>> singleton,
>>>>>> or let Spring build it and hold onto it).
>>>>>> 
>>>>>> Jeff Butler
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Dec 4, 2007 8:55 PM, Jeff Butler <jeffgbutler@gmail.com>
wrote:
>>>>>> 
>>>>>>> Interesting.  The char[] are inside Strings, which are inside
>>>>>>> HashMaps,
>>>>>>> which appear to be inside the parameters you are passing to iBATIS.

>>>>>>> It
>>>>>>> appears that you have some large HashMaps being passed into iBATIS.

>>>>>>> I
>>>>>>> submit that this is not an iBATIS problem but a problem in the
way
>>>>>>> you
>>>>>>> are
>>>>>>> USING iBATIS.
>>>>>>>
>>>>>>> Make sure that you are not holding onto these large HashMaps
you are
>>>>>>> using
>>>>>>> as parameters - it would be very interesting to see higher in
the
>>>>>>> HeapAnalyser than what you've shown - where in your code are
these
>>>>>>> HashMaps
>>>>>>> being created?
>>>>>>>
>>>>>>> Jeff Butler
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Dec 4, 2007 8:38 PM, pooven <poovendran_p@yahoo.com>
wrote:
>>>>>>>
>>>>>>> >
>>>>>>> > Hi,
>>>>>>> >
>>>>>>> > Here with I am attaching the screen shot of the Heapdump
analyser
>>>>>>> which
>>>>>>> > shows clearly the break up where in which package of the
iBatis
>>>>>>> class
>>>>>>> > causing the memory leak.
>>>>>>> >
>>>>>>> > Kindly if any one knows how to get rid of this issue , greatly
>>>>>>> > appreciated.
>>>>>>> > Thanks and regds,
>>>>>>> > Poovendran
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > pns77 wrote:
>>>>>>> > >
>>>>>>> > > I am also facing a similar issue with ibatis - we arrived
at the
>>>>>>> > > conclusion after an analysis of heap dump. The following
was the
>>>>>>> > response
>>>>>>> > > that we got for a ticket we had raised with IBM.
>>>>>>> > >
>>>>>>> > > " ..Maximum heap was set to 1024m and almost 1000mb
of heap is
>>>>>>> in
>>>>>>> use.
>>>>>>> > > Anlaysis of the heapdump shows the com/ibatis/sqlmap/engine/*
>>>>>>> code
>>>>>>> > > occupying most of heap(Nearly 900mb). .."
>>>>>>> > >
>>>>>>> > > There seems to be too many char[] (character array)
objects that
>>>>>>> get
>>>>>>> > > created from com.iBatis.sqlmap.engine.impl.SqlMapClientImpl
>>>>>>> class.
>>>>>>> In
>>>>>>> > our
>>>>>>> > > application side we had explcitly set the "daoManager"
object
>>>>>>> > reference to
>>>>>>> > > null so that it could be GC'ed. Still, we dont see
any
>>>>>>> improvement.
>>>>>>> > >
>>>>>>> > > Would apprecitate if some one could suggest a solution.
>>>>>>> > >
>>>>>>> > > We use WebSphere 6 on AIX / ibatis  accessing DB2 database.
>>>>>>> > >
>>>>>>> > > Thanks,
>>>>>>> > > P.N.Subramanian
>>>>>>> > >
>>>>>>> > >
>>>>>>> > > pooven wrote:
>>>>>>> > >>
>>>>>>> > >> We are using a iBatis 2.3.677 along with CrystalReport
>>>>>>> 11.8,Websphere
>>>>>>> > >> AppServer 6.0.23 and DB2 8.2 and Websphere Portal
Server
>>>>>>> 5.1.0.4,
>>>>>>> in
>>>>>>> > our
>>>>>>> > >> struts based portlet application.
>>>>>>> > >>
>>>>>>> > >> There are 183 reports we are using.
>>>>>>> > >>
>>>>>>> > >> We are facing the outOfMemory issue. After analysing
the
>>>>>>> heapDump
>>>>>>> > file
>>>>>>> > >> through the IBM HeapAnalyser we came to know that
there is a
>>>>>>> memory
>>>>>>> > >> leakage around 8 MB in the
>>>>>>> > >>
>>>>>>> > >> com.iBatis.sqlmap.engine.impl.SqlMapClientImpl
class,
>>>>>>> > >>
>>>>>>> > >> I called flushDataCache from the sqlMapper , still
it is of no
>>>>>>> use.
>>>>>>> > >>
>>>>>>> > >> Can any one guide me in this regard.
>>>>>>> > >>
>>>>>>> > >>
>>>>>>> > >> Thanks,
>>>>>>> > >> P.Poovendran
>>>>>>> > >>
>>>>>>> > >
>>>>>>> > >
>>>>>>> > http://www.nabble.com/file/p14164086/iBatis%2BMemory%2BLeak.bmp
>>>>>>> > iBatis+Memory+Leak.bmp
>>>>>>> > --
>>>>>>> > View this message in context:
>>>>>>> >
>>>>>>> http://www.nabble.com/Memeory-leak-in-com.iBatis.sqlmap.engine.impl.SqlMapClientImpl-class-tf4928332.html#a14164086
>>>>>>> >  Sent from the iBATIS - User - Java mailing list archive
at
>>>>>>> Nabble.com<http://nabble.com/>
>>>>>>> > .
>>>>>>> >
>>>>>>> >
>>>>>>>
>>>>>> 
>>>>>> 
>>>>>  http://www.nabble.com/file/p14175337/MemoryLeak.zip MemoryLeak.zip 
>>>>> 
>>>> 
>>> 
>>> 
>>> 
>> 
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Memeory-leak-in-com.iBatis.sqlmap.engine.impl.SqlMapClientImpl-class-tp14105662p24020392.html
Sent from the iBATIS - User - Java mailing list archive at Nabble.com.


Mime
View raw message