openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rick Curtis <curti...@gmail.com>
Subject Re: Is there a memory leak with org.apache.openjpa.kernel.FinalizingBrokerImpl
Date Fri, 06 Jun 2014 18:39:08 GMT
Yes, I was able to download the heapdump. Will you post the contents of
your persistence.xml file?


On Fri, Jun 6, 2014 at 10:02 AM, Chathuri Wimalasena <kamalasini@gmail.com>
wrote:

> Hi,
>
> Can you check whether this is accessible.
>
> https://iu.box.com/s/ah9dp1deko6p3wn8rfrg. It is something around 3 GB.
>
> Thanks..
> Chathuri
>
>
> On Fri, Jun 6, 2014 at 10:42 AM, Rick Curtis <curtisr7@gmail.com> wrote:
>
> > Can you post your heapdump somewhere?
> >
> >
> > On Fri, Jun 6, 2014 at 9:05 AM, Chathuri Wimalasena <
> kamalasini@gmail.com>
> > wrote:
> >
> > > Appreciate someone's insight on this issue.
> > >
> > > Thanks..
> > > Chathuri
> > >
> > >
> > > On Tue, Jun 3, 2014 at 12:22 PM, Chathuri Wimalasena <
> > kamalasini@gmail.com
> > > >
> > > wrote:
> > >
> > > > Hi,
> > > >
> > > > Thanks for the responses. I checked almost all the places where we
> are
> > > > using entityManager instance and make sure they are closed after they
> > > have
> > > > been used.
> > > >
> > > > Here are the two suspect classes I'm getting when analysing the
> memory
> > > > dump.
> > > >
> > > > *Problem Suspect 1*
> > > >
> > > > 546,326 instances of
> > *"org.apache.openjpa.kernel.FinalizingBrokerImpl"*,
> > > > loaded by *"sun.misc.Launcher$AppClassLoader @ 0x7007c7bc0"* occupy
> > > *1,031,525,848
> > > > (56.39%)* bytes. These instances are referenced from one instance of
> > > > *"java.util.concurrent.ConcurrentHashMap$Segment[]"*, loaded by
> > *"<system
> > > > class loader>"*
> > > >
> > > > *Keywords*
> > > > java.util.concurrent.ConcurrentHashMap$Segment[]
> > > > sun.misc.Launcher$AppClassLoader @ 0x7007c7bc0
> > > > org.apache.openjpa.kernel.FinalizingBrokerImpl
> > > >
> > > >
> > > > *Problem Suspect 2*
> > > >
> > > > 546,300 instances of
> *"org.apache.openjpa.kernel.LocalManagedRuntime"*,
> > > > loaded by *"sun.misc.Launcher$AppClassLoader @ 0x7007c7bc0"* occupy
> > > *680,034,240
> > > > (37.17%)* bytes. These instances are referenced from one instance of
> > > > *"java.util.concurrent.ConcurrentHashMap$Segment[]"*, loaded by
> > *"<system
> > > > class loader>"*
> > > >
> > > > *Keywords*
> > > > java.util.concurrent.ConcurrentHashMap$Segment[]
> > > > sun.misc.Launcher$AppClassLoader @ 0x7007c7bc0
> > > > org.apache.openjpa.kernel.LocalManagedRuntime
> > > >
> > > > This is how we create the Entity manager instance.
> > > >  public static EntityManager getEntityManager(){
> > > >         if (factory == null) {
> > > >             String connectionProperties = "DriverClassName=" +
> > > > Utils.getJDBCDriver() + "," + "Url=" +
> > > >               Utils.getJDBCURL() + "," +"Username=" +
> > > Utils.getJDBCUser() +
> > > > "," +                                           "Password=" +
> > > > Utils.getJDBCPassword() + ",validationQuery=" +
> > > >                     Utils.getValidationQuery() + "," +
> > > >
> > > > Utils.getJPAConnectionProperties();
> > > >             Map<String, String> properties = new HashMap<String,
> > > String>();
> > > >             properties.put("openjpa.ConnectionDriverName",
> > > > "org.apache.commons.dbcp.BasicDataSource");\
> > > >             properties.put("openjpa.ConnectionProperties",
> > > > connectionProperties);
> > > >             properties.put("openjpa.DynamicEnhancementAgent",
> "true");
> > > >             properties.put("openjpa.RuntimeUnenhancedClasses",
> > > > "unsupported");
> > > >             properties.put("openjpa.DataCache","true(CacheSize=5000,
> > > > SoftReferenceSize=0)");
> > > >             properties.put("openjpa.QueryCache","true(CacheSize=5000,
> > > > SoftReferenceSize=0)");
> > > >             properties.put("openjpa.RemoteCommitProvider","sjvm");
> > > >             properties.put("openjpa.Log","DefaultLevel=INFO,
> > > Runtime=INFO,
> > > > Tool=INFO, SQL=INFO");
> > > >             properties.put("openjpa.jdbc.SynchronizeMappings",
> > > > "buildSchema(ForeignKeys=true)");
> > > >             properties.put("openjpa.jdbc.QuerySQLCache", "false");
> > > >
> > > >             factory =
> > > > Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME,
> > > properties);
> > > >         }
> > > >        return factory.createEntityManager();
> > > >     }
> > > >
> > > > This is how we use entityManager and close it.
> > > > public void save() throws RegistryException {
> > > >         EntityManager em = null;
> > > >         try {
> > > >             em = ResourceUtils.getEntityManager();
> > > >             Gateway existingGateway = em.find(Gateway.class,
> > > gatewayName);
> > > >             em.close();
> > > >
> > > >             em = ResourceUtils.getEntityManager();
> > > >             em.getTransaction().begin();
> > > >             Gateway gateway = new Gateway();
> > > >             gateway.setGateway_name(gatewayName);
> > > >             gateway.setOwner(owner);
> > > >             if (existingGateway != null) {
> > > >                 existingGateway.setOwner(owner);
> > > >                 gateway = em.merge(existingGateway);
> > > >             } else {
> > > >                 em.persist(gateway);
> > > >             }
> > > >             em.getTransaction().commit();
> > > >             em.close();
> > > >         } catch (Exception e) {
> > > >             logger.error(e.getMessage(), e);
> > > >             throw new RegistryException(e);
> > > >         } finally {
> > > >             if (em != null && em.isOpen()) {
> > > >                 em.close();
> > > >             }
> > > >         }
> > > >     }
> > > >
> > > > Do you see any issues with this implementation ?
> > > >
> > > >
> > > > Thanks..
> > > > Chathuri
> > > >
> > > >
> > > > On Mon, Jun 2, 2014 at 6:52 PM, Kevin Sutter <kwsutter@gmail.com>
> > wrote:
> > > >
> > > >> The scary part of the proposed patch is what impact this will have
> on
> > > the
> > > >> "more important" non-finalizing BrokerImpl...  That is, if these two
> > > >> assignments would get reversed now to correct this supposed memory
> > leak
> > > >> with FinalizingBrokerImpl, what impact would this have on
> > non-finalizing
> > > >> BrokerImpls?
> > > >>
> > > >>         if
> > > >>
> > > >>
> > >
> >
> (FinalizingBrokerImpl.class.isAssignableFrom(bv.getTemplateBrokerType(_conf)))
> > > >> {
> > > >>             return MapBackedSet.decorate(new ConcurrentHashMap(),
> new
> > > >> Object() { });
> > > >>         } else {
> > > >>             return new
> > > >> ConcurrentReferenceHashSet<Broker>(ConcurrentReferenceHashSet.WEAK);
> > > >>         }
> > > >>
> > > >> I mean "more important" since in most cases we want the container
to
> > > >> manage
> > > >> the lifecycle and, thus, avoid the overhead associated with the
> > > >> FinalizingBrokerImpl...
> > > >>
> > > >>
> > > >>
> > > >> On Mon, Jun 2, 2014 at 1:26 PM, Chathuri Wimalasena <
> > > kamalasini@gmail.com
> > > >> >
> > > >> wrote:
> > > >>
> > > >> > I'm closing all the EntityManagers in a finally block. I will
> check
> > > if I
> > > >> > miss any place.
> > > >> >
> > > >> >
> > > >> > On Mon, Jun 2, 2014 at 2:17 PM, Rick Curtis <curtisr7@gmail.com>
> > > wrote:
> > > >> >
> > > >> > > > Any idea why I might get this issue and any suggestions
to
> avoid
> > > >> this ?
> > > >> > > Please make sure that your application closes all EntityManagers
> > > when
> > > >> > > you're through with them.
> > > >> > >
> > > >> > > Thanks,
> > > >> > > Rick
> > > >> > >
> > > >> > >
> > > >> > > On Mon, Jun 2, 2014 at 12:20 PM, Chathuri Wimalasena <
> > > >> > kamalasini@gmail.com
> > > >> > > >
> > > >> > > wrote:
> > > >> > >
> > > >> > > > Hi Devs,
> > > >> > > >
> > > >> > > > We are using apache openJPA 2.2 version and we experience
some
> > > >> memory
> > > >> > > leak
> > > >> > > > issues. While analyzing the memory dump, I see
> > > >> > > > *org.apache.openjpa.kernel.FinalizingBrokerImpl
> > > >> > > > *as one suspect for the memory leak.
> > > >> > > >
> > > >> > > > 311,437 instances of
> > > >> > *"org.apache.openjpa.kernel.FinalizingBrokerImpl"*,
> > > >> > > > loaded by *"sun.misc.Launcher$AppClassLoader @ 0x117a09088"*
> > > occupy
> > > >> > > > *585,849,792
> > > >> > > > (55.60%)* bytes. These instances are referenced from
one
> > instance
> > > of
> > > >> > > > *"java.util.concurrent.ConcurrentHashMap$Segment[]"*,
loaded
> by
> > > >> > *"<system
> > > >> > > > class loader>"*
> > > >> > > >
> > > >> > > > *Keywords*
> > > >> > > > java.util.concurrent.ConcurrentHashMap$Segment[]
> > > >> > > > sun.misc.Launcher$AppClassLoader @ 0x117a09088
> > > >> > > > org.apache.openjpa.kernel.FinalizingBrokerImpl
> > > >> > > >
> > > >> > > > While searching, I found [1] which is still open. Does
this
> > patch
> > > >> > applied
> > > >> > > > in openJPA 2.2 version ? Any idea why I might get this
issue
> and
> > > any
> > > >> > > > suggestions to avoid this ?
> > > >> > > >
> > > >> > > > Thanks..
> > > >> > > > Chathuri
> > > >> > > >
> > > >> > > > [1] https://issues.apache.org/jira/browse/OPENJPA-1193
> > > >> > > >
> > > >> > >
> > > >> > >
> > > >> > >
> > > >> > > --
> > > >> > > *Rick Curtis*
> > > >> > >
> > > >> >
> > > >>
> > > >
> > > >
> > >
> >
> >
> >
> > --
> > *Rick Curtis*
> >
>



-- 
*Rick Curtis*

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message