java - Memcache(InnitationTargetException)炸毁后端实例

标签 java google-app-engine objectify

我有一个 appengine 模块,它作为后台实例运行(b4,基本缩放),并迭代大量数据并对其进行处理。

当处理较少量的数据时,它可以正确运行,但是当数据变大时,我开始收到多个异常。一开始,InvocableTargetException 会导致 MemcacheServiceException,然后被 LogAndContinueErrorHandler 捕获(请参阅此线程: Backend "Process moved to a different machine" and fails withh error 500 )。

大约 14 秒后,又出现 10 个类似的错误,“进程已移至另一台机器。”。我认为原因是 appengine 识别出错误并假设实例出现问题并在一段时间后将其关闭。

正如另一个线程中所建议的,我可以确保移动到另一台机器可以使进程继续进行,但由于它确实有一个错误,因为某些东西太大/太长,我最好应该解决该错误。

这是错误级联开始时的错误,最后错误停止在com.googlecode.objectify.cache.MemcacheServiceRetryProxy调用:执行memcache操作时出错,重试:公共(public)抽象无效

    15:49:18.779
com.google.appengine.api.memcache.LogAndContinueErrorHandler handleServiceError: Service error in memcache
com.google.appengine.api.memcache.MemcacheServiceException: Memcache getAll: exception getting multiple keys
    at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:68)
    at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.absorbParentException(MemcacheServiceApiHelper.java:109)
    at com.google.appengine.api.utils.FutureWrapper.handleParentException(FutureWrapper.java:51)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
    at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:26)
    at com.google.appengine.api.memcache.MemcacheServiceImpl.getAll(MemcacheServiceImpl.java:64)
    at com.googlecode.objectify.cache.KeyMemcacheService.getAll(KeyMemcacheService.java:75)
    at com.googlecode.objectify.cache.EntityMemcache.cacheGetAll(EntityMemcache.java:346)
    at com.googlecode.objectify.cache.EntityMemcache.putAll(EntityMemcache.java:285)
    at com.googlecode.objectify.cache.CachingAsyncDatastoreService$3.success(CachingAsyncDatastoreService.java:280)
    at com.googlecode.objectify.cache.CachingAsyncDatastoreService$3.success(CachingAsyncDatastoreService.java:269)
    at com.googlecode.objectify.cache.TriggerSuccessFuture.trigger(TriggerSuccessFuture.java:38)
    at com.googlecode.objectify.cache.TriggerFuture.isDone(TriggerFuture.java:89)
    at com.googlecode.objectify.cache.TriggerFuture.get(TriggerFuture.java:104)
    at com.googlecode.objectify.impl.ResultAdapter.now(ResultAdapter.java:34)
    at com.googlecode.objectify.impl.Round$2.now(Round.java:135)
    at com.googlecode.objectify.impl.Round$2.now(Round.java:132)
    at com.googlecode.objectify.impl.LoadEngine$1.nowUncached(LoadEngine.java:172)
    at com.googlecode.objectify.impl.LoadEngine$1.nowUncached(LoadEngine.java:164)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:73)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.LoadResult.now(LoadResult.java:25)
    at ch.eaternity.server.DAO.loadEntityNow(DAO.java:383)
    at ch.eaternity.server.services.ProductServiceImpl.getProduct(ProductServiceImpl.java:21)
    at ch.eaternity.server.CompositeRoot.restoreJavaObject(CompositeRoot.java:237)
    at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_$1.run(Method_.java:179)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.privilegedInvoke(Method_.java:176)
    at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke_(Method_.java:137)
    at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke(Method_.java:45)
    at com.googlecode.objectify.impl.ConcreteEntityMetadata.invokeLifecycleCallbacks(ConcreteEntityMetadata.java:167)
    at com.googlecode.objectify.impl.ConcreteEntityMetadata.access$000(ConcreteEntityMetadata.java:24)
    at com.googlecode.objectify.impl.ConcreteEntityMetadata$1.run(ConcreteEntityMetadata.java:127)
    at com.googlecode.objectify.impl.translate.LoadContext.done(LoadContext.java:70)
    at com.googlecode.objectify.impl.LoadEngine$1.postExecuteHook(LoadEngine.java:191)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:33)
    at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:73)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:20)
    at com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:9)
    at com.google.common.collect.Iterators$8.transform(Iterators.java:794)
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
    at com.googlecode.objectify.impl.Chunk.next(Chunk.java:27)
    at com.googlecode.objectify.impl.Chunk.next(Chunk.java:10)
    at com.google.common.collect.Iterators$5.next(Iterators.java:553)
    at com.google.common.collect.Iterators$PeekingImpl.peek(Iterators.java:1162)
    at com.googlecode.objectify.impl.ChunkingIterator.hasNext(ChunkingIterator.java:52)
    at com.google.common.collect.Iterators.addAll(Iterators.java:356)
    at com.google.common.collect.Lists.newArrayList(Lists.java:147)
    at com.google.common.collect.Lists.newArrayList(Lists.java:129)
    at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:21)
    at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:11)
    at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.util.ResultProxy.invoke(ResultProxy.java:32)
    at com.sun.proxy.$Proxy23.toArray(Unknown Source)
    at java.util.ArrayList.addAll(ArrayList.java:530)
    at ch.eaternity.server.DAO.loadCompositeRootsByDateAndKitchenId(DAO.java:1058)
    at ch.eaternity.server.services.ReportServiceImpl.loadCompositeRoots(ReportServiceImpl.java:75)
    at ch.eaternity.server.services.ReportServiceImpl.loadSupplies(ReportServiceImpl.java:24)
    at ch.eaternity.server.reports.GeneralKitchenDataAnalyzer.generateAndSaveConcreteGeneralKitchenData(GeneralKitchenDataAnalyzer.java:45)
    at ch.eaternity.server.servlets.ReportGeneratingServlet.kickOffReportDataGeneration(ReportGeneratingServlet.java:75)
    at ch.eaternity.server.servlets.ReportGeneratingServlet.doPost(ReportGeneratingServlet.java:46)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    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 ch.eaternity.server.NamespaceFilter.doFilter(NamespaceFilter.java:36)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:59)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:49)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:254)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
<continued in next message>
   
E
 15:49:18.779
<continued from previous message>
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:480)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:438)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    at java.lang.Thread.run(Thread.java:724)
   
I
 15:49:20.272
com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler handleApiProxyException: Memcache putAll: Unknown exception setting 0 keys: 
   
W
 15:49:20.276
com.googlecode.objectify.cache.MemcacheServiceRetryProxy invoke: Error performing memcache operation, retrying: public abstract void com.google.appengine.api.memcache.MemcacheService.putAll(java.util.Map)
java.lang.reflect.InvocationTargetException
    at com.google.appengine.runtime.Request.process-fdcbff8350bb99f7(Request.java)
    at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:45)
    at com.googlecode.objectify.cache.MemcacheServiceRetryProxy.invoke(MemcacheServiceRetryProxy.java:68)
    at com.sun.proxy.$Proxy10.putAll(Unknown Source)
    at com.googlecode.objectify.cache.KeyMemcacheService.putAll(KeyMemcacheService.java:80)
    at com.googlecode.objectify.cache.EntityMemcache.empty(EntityMemcache.java:312)
    at com.googlecode.objectify.cache.EntityMemcache.putAll(EntityMemcache.java:296)
    at com.googlecode.objectify.cache.CachingAsyncDatastoreService$3.success(CachingAsyncDatastoreService.java:280)
    at com.googlecode.objectify.cache.CachingAsyncDatastoreService$3.success(CachingAsyncDatastoreService.java:269)
    at com.googlecode.objectify.cache.TriggerSuccessFuture.trigger(TriggerSuccessFuture.java:38)
    at com.googlecode.objectify.cache.TriggerFuture.isDone(TriggerFuture.java:89)
    at com.googlecode.objectify.cache.TriggerFuture.get(TriggerFuture.java:104)
    at com.googlecode.objectify.impl.ResultAdapter.now(ResultAdapter.java:34)
    at com.googlecode.objectify.impl.Round$2.now(Round.java:135)
    at com.googlecode.objectify.impl.Round$2.now(Round.java:132)
    at com.googlecode.objectify.impl.LoadEngine$1.nowUncached(LoadEngine.java:172)
    at com.googlecode.objectify.impl.LoadEngine$1.nowUncached(LoadEngine.java:164)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:73)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.LoadResult.now(LoadResult.java:25)
    at ch.eaternity.server.DAO.loadEntityNow(DAO.java:383)
    at ch.eaternity.server.services.ProductServiceImpl.getProduct(ProductServiceImpl.java:21)
    at ch.eaternity.server.CompositeRoot.restoreJavaObject(CompositeRoot.java:237)
    at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:45)
    at com.googlecode.objectify.impl.ConcreteEntityMetadata.invokeLifecycleCallbacks(ConcreteEntityMetadata.java:167)
    at com.googlecode.objectify.impl.ConcreteEntityMetadata.access$000(ConcreteEntityMetadata.java:24)
    at com.googlecode.objectify.impl.ConcreteEntityMetadata$1.run(ConcreteEntityMetadata.java:127)
    at com.googlecode.objectify.impl.translate.LoadContext.done(LoadContext.java:70)
    at com.googlecode.objectify.impl.LoadEngine$1.postExecuteHook(LoadEngine.java:191)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:33)
    at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:73)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:20)
    at com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:9)
    at com.google.common.collect.Iterators$8.transform(Iterators.java:794)
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
    at com.googlecode.objectify.impl.Chunk.next(Chunk.java:27)
    at com.googlecode.objectify.impl.Chunk.next(Chunk.java:10)
    at com.google.common.collect.Iterators$5.next(Iterators.java:553)
    at com.google.common.collect.Iterators$PeekingImpl.peek(Iterators.java:1162)
    at com.googlecode.objectify.impl.ChunkingIterator.hasNext(ChunkingIterator.java:52)
    at com.google.common.collect.Iterators.addAll(Iterators.java:356)
    at com.google.common.collect.Lists.newArrayList(Lists.java:147)
    at com.google.common.collect.Lists.newArrayList(Lists.java:129)
    at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:21)
    at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:11)
    at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.util.ResultProxy.invoke(ResultProxy.java:32)
    at com.sun.proxy.$Proxy23.toArray(Unknown Source)
    at java.util.ArrayList.addAll(ArrayList.java:530)
    at ch.eaternity.server.DAO.loadCompositeRootsByDateAndKitchenId(DAO.java:1058)
    at ch.eaternity.server.services.ReportServiceImpl.loadCompositeRoots(ReportServiceImpl.java:75)
    at ch.eaternity.server.services.ReportServiceImpl.loadSupplies(ReportServiceImpl.java:24)
    at ch.eaternity.server.reports.GeneralKitchenDataAnalyzer.generateAndSaveConcreteGeneralKitchenData(GeneralKitchenDataAnalyzer.java:45)
    at ch.eaternity.server.servlets.ReportGeneratingServlet.kickOffReportDataGeneration(ReportGeneratingServlet.java:75)
    at ch.eaternity.server.servlets.ReportGeneratingServlet.doPost(ReportGeneratingServlet.java:46)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    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 ch.eaternity.server.NamespaceFilter.doFilter(NamespaceFilter.java:36)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:59)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:49)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:438)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442)
    at java.lang.Thread.run(Thread.java:724)
Caused by: com.google.appengine.api.memcache.MemcacheServiceException: Memcache putAll: Unknown exception setting 0 keys
    at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:68)
    at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl$RpcResponseHandlerForPut.handleApiProxyException(AsyncMemcacheServiceImpl.java:348)
    at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.absorbParentException(MemcacheServiceApiHelper.java:109)
<continued in next message>
   
W
 15:49:20.276
<continued from previous message>
    at com.google.appengine.api.utils.FutureWrapper.handleParentException(FutureWrapper.java:51)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:26)
    at com.google.appengine.api.memcache.MemcacheServiceImpl.putAll(MemcacheServiceImpl.java:115)
    ... 91 more

我不确定它与 appengine 或 objectify 相关,请参阅此线程进行比较: https://groups.google.com/forum/#!msg/objectify-appengine/GzFmrQNMaI0/1ALIKbEY9agJ

具体化:4.0RC2 应用引擎:1.9.9

更新 1 升级到 Objectify 4.1.3 后,不再发生异常,但在迭代中的同一点,进程移至另一台计算机。 出现警告。为什么它会被转移到另一台机器上?

更新2 与此同时,我达到了内存限制的几倍,最终将后端实例提升到B4,暂时解决了问题。

java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space

现在错误移动了一点,现在我只收到此异常大约 100 次,直到进程移动到另一台机器。

com.google.appengine.api.memcache.MemcacheServiceException: Memcache getAll: exception getting multiple keys

更新3 有时批处理也能成功运行!我不明白...我会尝试找出它何时不成功。

有人知道问题出在哪里吗?怎么解决呢? 非常感谢!

最佳答案

我没有直接回答您的问题,但我可以阐明 Objectify(和 GAE)的 WRT memcache 行为。

Objectify 使用 memcache 作为直读缓存,因此“memcache 不可用”在所有实际用途中与“空结果”相同 - Objectify 会从数据存储中获取数据。 GAE 的 memcache API 有一个 LogAndContinueErrorHandler正是为了这个目的 - memecache 错误被记录,但在其他情况下被忽略。

不幸的是 Google 的 LogAndContinueErrorHandler有一个错误,某些类型的内存缓存错误既没有被记录也没有被忽略。 Objectify 获得了一些新行为(恰如其分的 MemcacheServiceRetryProxy ),它会重试 memcache API 调用几次,然后放弃,返回空结果。这就是您在 4.0RC2 中看到的情况。

一段时间后,Google 修复了处理程序,而不是通过更改 LogAndContinueErrorHandler 的行为(人们认为某些用户可能依赖于确切的行为)但是通过弃用该类并添加 ConsistentLogAndContinueErrorHandler其行为......更加一致。 Objectify 的更高版本改用此功能,现在您可以在 4.1.3 中看到这种行为 - 噪音更少。

这就是故事的一部分。故事的另一部分是,在某些时候,Objectify 在优化对 memcache 的调用方面有点过于自鸣得意,有时会将 memcache 调用优化为零长度的键列表。 memcache API 不喜欢这样,这可能是造成的 Memcache putAll: Unknown exception setting 0 keys 。如果没有操作,较新版本的 Objectify 会跳过 memcache 调用。

至于Process moved to a different machine. , 我不知道。可能相关,也可能无关。

关于java - Memcache(InnitationTargetException)炸毁后端实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227112/

相关文章:

google-app-engine - 任务队列、幂等性和对象化事务

java - virtuoso-opensource : using jenaprovider, 如何从文件而不是从 URL 读取数据?

java - 配置 Tomcat/Catalina 以在端口 80 上以根目录为应用程序提供服务

python - 检查 App Engine 数据存储区中是否存在记录

android - 无法解析符号 'MyApi'

java - 克服谷歌数据存储的 30 个子查询限制

java - Spring 启动: MySQLNonTransientConnectionException: Could not create connection

java - 无法弄清楚 java.lang.ArrayIndexOutOfBoundsException : length=1; index=1 is coming from 在哪里

python - 如何在 Google App Engine 中部署 Django 应用程序?

python - 谷歌应用引擎: "could not initialize images API" even though PIL is installed