内存缓存中的GAE灵活环境服务错误

时间:2016-06-28 09:27:01

标签: google-app-engine java-8 memcached jetty-9 app-engine-flexible

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

from ctor: 0x7fff52a36010 3 0x7fff52a36010
about to put 5 in 0x7fff52a36010
from main: 0x7fff52a36010 5 0x7fff52a36010

1 个答案:

答案 0 :(得分:2)

此问题仅在本地复制,我也面对此问题。我假设它是由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的请求可能会失败,您必须处理这些错误。所以,我建议你添加错误处理程序和一些重试机制。

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