We're also getting the (on dev machines):
Exception in thread "main" java.lang.OutOfMemoryError: PermGen space.
This happens when we raise the number of backend instances. When we
use 3 backend instances (on local machine), the dev server works fine.
When we use 4, sometimes it works - mostly not. Above that, we always
get the OutOfMemoryError exception.
Here are the exception details:
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at
com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:
176)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
com.google.appengine.api.datastore.DatastoreServiceImpl.<init>(DatastoreServiceImpl.java:
31)
at
com.google.appengine.api.datastore.DatastoreServiceFactory.getDatastoreService(DatastoreServiceFactory.java:
47)
at
com.google.appengine.api.datastore.DatastoreServiceFactory.getDatastoreService(DatastoreServiceFactory.java:
20)
at com.google.appengine.api.taskqueue.QueueImpl.<init>(QueueImpl.java:
47)
at
com.google.appengine.api.taskqueue.QueueFactory.getQueue(QueueFactory.java:
36)
at
com.saymg.oktapi.guice.ServicesModule.configure(ServicesModule.java:
182)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements
$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.internal.InjectorShell
$Builder.build(InjectorShell.java:138)
at
com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:
115)
at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:100)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:61)
at
com.saymg.oktapi.guice.InjectorFactory.<clinit>(InjectorFactory.java:
14)
at
com.saymg.oktapi.guice.WebGuiceServletContextListener.getInjector(WebGuiceServletContextListener.java:
16)
at
com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:
45)
at
com.saymg.oktapi.guice.WebGuiceServletContextListener.contextInitialized(WebGuiceServletContextListener.java:
23)
at
org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:
548)
I think that the dev environment tries for each backend instance
defined in backends.xml.
Looking for a way to bypass this problem, with no configuration
changes of backends.xml, since we want to do as less changes as
possible between dev env and deployed app.
On Jan 5, 9:44 am, jhonghee <[email protected]> wrote:
> As I reported in my previous
> post:https://groups.google.com/group/google-appengine-java/browse_thread/t...,
> I am having this PermGen issue consistently now.
>
> I think that it's really related to localdevenvironment support
> forBackendservice. Please take a look at following stacktrace. It
> originated from BackendServersFilter. If I disabledBackendService on
> my localdev, I don't have PermGen issue.
>
> java.lang.OutOfMemoryError: PermGen space
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
> 141)
> at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
> at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
> at
> com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(Iso
> latedAppClassLoader.java:
> 176)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> at
> org.codehaus.jackson.util.BufferRecycler.<init>(BufferRecycler.java:
> 48)
> at
> org.codehaus.jackson.JsonFactory._getBufferRecycler(JsonFactory.java:
> 601)
> at org.codehaus.jackson.JsonFactory._createContext(JsonFactory.java:
> 532)
> at
> org.codehaus.jackson.JsonFactory.createJsonGenerator(JsonFactory.java:
> 458)
> at
> org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.
> writeInternal(MappingJacksonHttpMessageConverter.java:
> 148)
> at
> org.springframework.http.converter.AbstractHttpMessageConverter.write(Abstr
> actHttpMessageConverter.java:
> 181)
> at
> org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapt er
> $ServletHandlerMethodInvoker.writeWithMessageConverters(AnnotationMethodHan
> dlerAdapter.java:
> 975)
> at
> org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapt er
> $ServletHandlerMethodInvoker.handleResponseBody(AnnotationMethodHandlerAdap
> ter.java:
> 933)
> at
> org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapt er
> $ServletHandlerMethodInvoker.getModelAndView(AnnotationMethodHandlerAdapter
> .java:
> 882)
> at
> org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapt
> er.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:
> 428)
> at
> org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapt
> er.handle(AnnotationMethodHandlerAdapter.java:
> 414)
> at
> org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServ
> let.java:
> 790)
> at
> org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServl
> et.java:
> 719)
> at
> org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkSe
> rvlet.java:
> 644)
> at
> org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.jav a:
> 549)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
> 511)
> at org.mortbay.jetty.servlet.ServletHandler
> $CachedChain.doFilter(ServletHandler.java:1166)
> at
> com.google.appengine.tools.development.BackendServersFilter.doFilter(Backen
> dServersFilter.java:
> 97)
> Jan 5, 2012 2:32:18 AM com.google.apphosting.utils.jetty.JettyLogger
> warn
> WARNING: /saveItem
> java.lang.OutOfMemoryError: PermGen space
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
> 141)
> at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
> at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
> at
> com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(Iso
> latedAppClassLoader.java:
> 176)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> at com.google.apphosting.api.DatastorePb
> $PutResponse.<clinit>(DatastorePb.java:11932)
> at
> com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.doBatchPutBySi
> ze(AsyncDatastoreServiceImpl.java:
> 523)
> at
> com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.put(AsyncDatas
> toreServiceImpl.java:
> 466)
> at com.google.appengine.api.datastore.DatastoreServiceImpl
> $2.runInternal(DatastoreServiceImpl.java:113)
> at com.google.appengine.api.datastore.DatastoreServiceImpl
> $2.runInternal(DatastoreServiceImpl.java:110)
> at
> com.google.appengine.api.datastore.TransactionRunner.runInTransaction(Trans
> actionRunner.java:
> 31)
> at
> com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServic
> eImpl.java:
> 110)
> at
> com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServic
> eImpl.java:
> 94)
> at
> org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.pu
> t(RuntimeExceptionWrappingDatastoreService.java:
> 96)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe
> rsistenceHandler.java:
> 196)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe
> rsistenceHandler.java:
> 137)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(D
> atastorePersistenceHandler.java:
> 270)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(Da
> tastorePersistenceHandler.java:
> 256)
> at
> org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent(JDOStateMa
> nagerImpl.java:
> 3185)
> at
> org.datanucleus.state.JDOStateManagerImpl.makePersistent(JDOStateManagerImp
> l.java:
> 3161)
> at
> org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.j
> ava:
> 1298)
> at
> org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:
> 1175)
> at
> org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceM
> anager.java:
> 669)
> at
> org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceMana
> ger.java:
> 694)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.