ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kai Grabfelder <nos...@kaigrabfelder.de>
Subject Re: Memeory leak in com.iBatis.sqlmap.engine.impl.SqlMapClientImpl class
Date Sat, 13 Jun 2009 08:41:30 GMT
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 
>> 
> 


Mime
View raw message