Ich speichere eine Karte von etwa 20k Einträge auf GAE memchace. Jeder Eintrag ist um 1Kb groß. Ich erhalte den folgenden Fehler. Gibt es eine Einschränkung? In meinem Verständnis der Begrenzung von 1 MB ist es für jede Entität, die Sie in den Memcache nicht die gesamte Charge setzen.Google App Engine java OutOfMemoryError wenn putAll auf Memcache
java.lang.OutOfMemoryError: Java heap space
at com.google.appengine.repackaged.com.google.protobuf.AbstractMessageLite.toByteArray(AbstractMessageLite.java:34)
at com.google.appengine.api.memcache.MemcacheServiceApiHelper.makeAsyncCall(MemcacheServiceApiHelper.java:104)
at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.doPutAll(AsyncMemcacheServiceImpl.java:521)
at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.putAll(AsyncMemcacheServiceImpl.java:564)
at com.google.appengine.api.memcache.MemcacheServiceImpl.putAll(MemcacheServiceImpl.java:112)
[...]
Und mein Code wie folgt aussieht:
final HashMap<EntityToStoreKey, EntityToStore> map = new HashMap<EntityToStoreKey, EntityToStore>();
for (EntityToStore entityToStore : entitiesToStore) {
index.add(entityToStore);
map.put(EntityToStoreKey.key(entityToStore.getId(), false), entityToStore);
}
entityToStoreCache.putAll(map, portalCacheTimeout);
Und das Problem nur auf einer prod Umwelt geschieht, nicht in lokalen.
Irgendwelche Hilfe/Tipp?
Dies scheint kein 'memcache' Thema. Bevor die Daten an Memcache übergeben werden, wird sie serialisiert, und das ist der Fall, wenn Sie die Größe Ihres Heapspeichers überschreiten. Wenn Ihre Entitäten 1k groß sind, ist das überraschend. Könnte es einen zyklischen Bezug innerhalb der Entität geben? – cheeken