0

我使用jetty9-compat + java8配置并收到以下异常。也许正因为如此,我无法在会话中存储对象,所以最终我无法登录到我的服务。在memcache中GAE灵活环境服务错误

[INFO] cze 28, 2016 11:17:56 AM com.google.apphosting.vmruntime.VmMetadataCache getMetadata 
[INFO] 
[INFO] INFO: Meta-data 'attributes/gae_affinity' path retrieval error: metadata 
[INFO] 
[INFO] cze 28, 2016 11:17:56 AM com.google.apphosting.vmruntime.VmApiProxyDelegate runSyncCall 
[INFO] 
[INFO] INFO: HTTP ApiProxy I/O error for memcache.Get: The target server failed to respond 
[INFO] 
[INFO] cze 28, 2016 11:17:56 AM com.google.appengine.api.memcache.LogAndContinueErrorHandler handleServiceError 
[INFO] 
[INFO] INFO: Service error in memcache 
[INFO] 
[INFO] com.google.appengine.api.memcache.MemcacheServiceException: RCP Failure for API call: memcache Get 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.constructApiException(VmApiProxyDelegate.java:232) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.runSyncCall(VmApiProxyDelegate.java:195) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.makeApiCall(VmApiProxyDelegate.java:154) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.access$000(VmApiProxyDelegate.java:60) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:436) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:412) 
[INFO] 
[INFO] at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
[INFO] 
[INFO] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[INFO] 
[INFO] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[INFO] 
[INFO] at java.lang.Thread.run(Thread.java:745) 
[INFO] 
[INFO] 
[INFO] 
[INFO] DEBUG 2016-06-28 11:17:56,493 api_server.py:277] Handled datastore_v3.Get in 0.0000 
[INFO] cze 28, 2016 11:17:59 AM com.mysql.jdbc.log.Slf4JLogger logInfo 

回答

1

此问题仅在本地复制,我也面对它。我认为它是由dev服务器运行的本地memcached的错误配置引起的。

我会尽力解释我的观点。在我的情况下,第一个请求总是成功的。 因为在第一次请求的情况下Apache HttpClient打开一个新连接并将其放入池中。 有源代码https://github.com/GoogleCloudPlatform/appengine-java-vm-runtime/blob/master/appengine-managed-runtime/src/main/java/com/google/apphosting/vmruntime/VmApiProxyDelegate.java

所有进一步的请求都是成功的,如果它们的执行间隔长达10秒。但是如果在10秒内没有请求,则下一个请求失败。 发生这种情况是因为memcached服务从其侧面关闭连接,但HttpClient不知道它。

VmApiProxyDelegate HttpClient配置为在60秒后关闭空闲连接。所以,如果我等待超过1分钟而不是10秒,我的下一个请求就不会失败。因为在这种情况下,HttpClient会打开尚未关闭的新连接。

为了避免这个问题,从memcached存根端配置连接超时是正确的。但是文档说你对memcached的请求可能会失败,你必须处理这些错误。所以,我提供你添加错误处理程序和一些重试机制。

当然,以上所有情况都适合您的情况,如果在您的配置中一切正常。考虑到你没有提供配置和代码的例子,我假设一切都很好。