1

我使用 jetty9-compat + java8 配置并收到以下异常。可能正因为如此,我无法在会话中存储对象,所以最后我无法登录我的服务。

[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
4

1 回答 1

2

这个问题只在本地复制,我也遇到了。我认为这是由开发服务器运行的本地 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 不知道它。

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

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

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

于 2016-07-04T08:10:26.273 回答