2010-04-18 5 views
4

J'ai plusieurs servlets dans mon app java appengine qui font dans le tri de la mémoire et prennent de l'ordre des secondes pour terminer. Ces complète sans erreur.Java Appengine APPSTATS provoquant Java erreur de mémoire insuffisante

Cependant, j'ai récemment permis Appstats pour AppEngine et commencé à recevoir l'erreur suivante:

java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) 
    at java.lang.AbstractStringBuilder.append(Unknown Source) 
    at java.lang.StringBuilder.append(Unknown Source) 
    at java.lang.StringBuilder.append(Unknown Source) 
    at java.lang.StringBuilder.append(Unknown Source) 
    at com.google.appengine.repackaged.com.google.protobuf.TextFormat$TextGenerator.write(TextFormat.java:344) 
    at com.google.appengine.repackaged.com.google.protobuf.TextFormat$TextGenerator.print(TextFormat.java:332) 
    at com.google.appengine.repackaged.com.google.protobuf.TextFormat.printUnknownFields(TextFormat.java:249) 
    at com.google.appengine.repackaged.com.google.protobuf.TextFormat.print(TextFormat.java:47) 
    at com.google.appengine.repackaged.com.google.protobuf.TextFormat.printToString(TextFormat.java:73) 
    at com.google.appengine.tools.appstats.Recorder.makeSummary(Recorder.java:157) 
    at com.google.appengine.tools.appstats.Recorder.makeSyncCall(Recorder.java:239) 
    at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:98) 
    at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:54) 
    at com.google.appengine.api.datastore.PreparedQueryImpl.runQuery(PreparedQueryImpl.java:127) 
    at com.google.appengine.api.datastore.PreparedQueryImpl.asQueryResultList(PreparedQueryImpl.java:81) 
    at org.datanucleus.store.appengine.query.DatastoreQuery.fulfillEntityQuery(DatastoreQuery.java:379) 
    at org.datanucleus.store.appengine.query.DatastoreQuery.executeQuery(DatastoreQuery.java:289) 
    at org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:239) 
    at org.datanucleus.store.appengine.query.JDOQLQuery.performExecute(JDOQLQuery.java:89) 
    at org.datanucleus.store.query.Query.executeQuery(Query.java:1489) 
    at org.datanucleus.store.query.Query.executeWithArray(Query.java:1371) 
    at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:243) 
    at com.poo.pooserver.dataaccess.DataAccessHelper.getPooStream(DataAccessHelper.java:204) 
    at com.poo.pooserver.GetPooStreamServlet.doPost(GetPooStreamServlet.java:58) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) 
    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.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:92) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
+0

Je ne suis pas sûr de ce que vous répondez voulez - vous êtes à court de mémoire. Vous devez soit réduire votre consommation de mémoire ou désactiver appstats. –

+0

bien - je ne comprenais pas pourquoi l'activation appstats utiliserait beaucoup plus de mémoire. Quelle quantité de mémoire est disponible pour une utilisation dans une requête? Combien de cela est pris par appstats? – aloo

Répondre

1

Je me demande si cela peut vous aider à réduire l'apparition de OutOfMemoryErrors: How to reduce the memory usage of Appstats on Google App Engine Java

<filter> 
    <filter-name>appstats</filter-name> 
    <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class> 
    <init-param> 
     <param-name>maxLinesOfStackTrace</param-name> 
     <param-value>16</param-value> 
    </init-param> 
</filter> 
1

Appstats lui-même utilise la mémoire et peut légèrement réduire la quantité de mémoire disponible pour votre application Java, mais la réduction devrait être légère . Appstats lui-même peut également manquer de mémoire (généralement vu lors d'un appel memcache, link text), mais cela ne semble pas être le cas avec votre application. Je verrais si vous pouvez faire quelque chose pour diviser le travail en plus petits morceaux).

Questions connexes