openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chathuri Wimalasena <kamalas...@gmail.com>
Subject Re: Is there a memory leak with org.apache.openjpa.kernel.FinalizingBrokerImpl
Date Fri, 06 Jun 2014 15:02:22 GMT
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*
>

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