gpt4 book ai didi

java - Google App Engine java OutOfMemoryError when putAll on memcache

转载 作者:行者123 更新时间:2023-11-29 03:48:08 26 4
gpt4 key购买 nike

我在 GAE memchace 上存储了大约 20k 个条目的映射。每个条目大约 1Kb 大。我收到以下错误。有限制吗?据我了解,1Mb 的限制是针对您放入内存缓存中的每个实体,而不是整个批处理。

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)
[...]

我的代码如下:

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);

而且这个问题只发生在 prod 环境中,而不是在本地。

任何帮助/提示?

最佳答案

memcache 的大小在 GAE 中完全是个黑盒子。不要相信它是任何东西。你是对的,没有一个实体可以大于 1 MB,但你不知道你的总内存缓存有多大,也不知道驱逐政策是什么。

GAE 的最新版本似乎让我们对 memcache 有了一些了解,但直到现在它实际上还是一个黑盒子。我建议不要做你想做的事。如果您需要预热缓存,请循环执行并仅加载最相关的内容。

关于java - Google App Engine java OutOfMemoryError when putAll on memcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9967400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com