在GAE应用程序中访问数据库时,随机出现“内存缓存中的服务错误”

时间:2019-06-07 12:15:43

标签: google-app-engine google-cloud-platform

我的应用程序是在GAE标准环境上运行的Java应用程序。突然,它说在每次点击Google DataStore的调用中都给出了与Memcache相关的错误( memcache中的服务错误)。当我重新部署新版本时,此功能暂时消失,但数小时后又恢复正常。使用的Java运行时为8,而Google SDK为1.9.71。

我试图在每个论坛上寻找解决方案,而我找到的最接近的是Service error in memcache with Java Google App Engine Standard at random time periods。但是,建议的解决方案摘要为:

  1. 错误只是一个信息/警告,当缺少缓存时,代码将访问DataStore并选择值。但是事实并非如此,实际上它不允许某些作业计划。
  2. Objectify
  3. 版本可能会导致错误,但我使用的是建议使用的4.1.3-3.x和4.0版本为某些用户提供了错误
  4. 不要使用Memcache 并直接使用DataStore。我不确定在数据库层更改稳定的应用程序的代码有多实际/很耗时。

堆栈跟踪为:

com.google.appengine.api.memcache.LogAndContinueErrorHandler handleServiceError: Service error in memcache (LogAndContinueErrorHandler.java:52)
com.google.appengine.api.memcache.MemcacheServiceException: Memcache getIdentifiables: exception getting multiple keys
                at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:80)
                at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:64)
                at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.absorbParentException(MemcacheServiceApiHelper.java:129)
                at com.google.appengine.api.utils.FutureWrapper.handleParentException(FutureWrapper.java:56)
                at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:95)
                at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:28)
                at com.google.appengine.api.memcache.MemcacheServiceImpl.getIdentifiables(MemcacheServiceImpl.java:61)
                at com.googlecode.objectify.cache.KeyMemcacheService.getIdentifiables(KeyMemcacheService.java:75)
                at com.googlecode.objectify.cache.EntityMemcache.getAll(EntityMemcache.java:222)
                at com.googlecode.objectify.cache.CachingAsyncDatastoreService.get(CachingAsyncDatastoreService.java:253)
                at com.googlecode.objectify.impl.LoadEngine.fetch(LoadEngine.java:203)
                at com.googlecode.objectify.impl.Round.fetchPending(Round.java:130)
                at com.googlecode.objectify.impl.Round.execute(Round.java:107)
                at com.googlecode.objectify.impl.LoadEngine.execute(LoadEngine.java:94)
                at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:72)
                at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
                at com.googlecode.objectify.LoadResult.now(LoadResult.java:25)
                at MyPackage.impl.ObjectifyGenericDaoImpl.get(ObjectifyGenericDaoImpl.java:76)
                at MyPackage.Method2(ScheduleServiceImpl.java:74)
                at MyPackage.Method1(ScheduleController.java:84)
                at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)

0 个答案:

没有答案