- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在过去的一个月里,我们的 Java Google App Engine 标准 Web 应用程序开始在看似随机的时间出现奇怪的错误(请参阅下面的堆栈跟踪)。大约在这段时间,我们进行了以下更改:
从 Java7 运行时切换到 Java8/Jetty9 运行时(这使我们能够更灵活地链接到第 3 方支付库)。
改用 Google Cloud SDK 而非单独的 Google App Engine SDK 进行部署。
昨天我们经历了 3 个错误时期。其中一次发生在 2 月 28 日太平洋标准时间 0530 点到太平洋标准时间 0600 点左右。突然间,所有从数据库加载的尝试都开始失败:
com.google.appengine.api.memcache.LogAndContinueErrorHandler handleServiceError: Service error in memcache (LogAndContinueErrorHandler.java:50)
com.google.appengine.api.memcache.MemcacheServiceException: Memcache getIdentifiables: exception getting multiple keys
at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:77)
at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.absorbParentException(MemcacheServiceApiHelper.java:122)
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.EntityMemcache.getAll(EntityMemcache.java:215)
at com.googlecode.objectify.cache.CachingAsyncDatastoreService.get(CachingAsyncDatastoreService.java:253)
at com.googlecode.objectify.impl.engine.LoadEngine$Round.fetchPending(LoadEngine.java:172)
at com.googlecode.objectify.impl.engine.LoadEngine$Round.execute(LoadEngine.java:118)
at com.googlecode.objectify.impl.engine.LoadEngine.execute(LoadEngine.java:258)
at com.googlecode.objectify.impl.cmd.LoaderImpl.refs(LoaderImpl.java:110)
at com.googlecode.objectify.impl.cmd.LoaderImpl.refs(LoaderImpl.java:98)
at com.googlecode.objectify.impl.cmd.LoaderImpl.ref(LoaderImpl.java:88)
at com.googlecode.objectify.impl.cmd.LoadTypeImpl.refOf(LoadTypeImpl.java:92)
at com.googlecode.objectify.impl.cmd.LoadTypeImpl.id(LoadTypeImpl.java:86)
at com.codeavengers.LoginServlet.doPost(LoginServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772)
at com.codeavengers.UrlFilter.doFilter(UrlFilter.java:143)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.codeavengers.payments.PermissionsFilter.doFilter(PermissionsFilter.java:114)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:59)
at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:49)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.runtime.jetty9.SaveSessionFilter.doFilter(SaveSessionFilter.java:43)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:297)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at org.eclipse.jetty.server.Server.handle(Server.java:534)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
at com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:202)
at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:81)
at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:108)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:680)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:642)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:612)
at com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:806)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:274)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.apphosting.api.ApiProxy$UnknownException: An error occurred for the API request memcache.Get().
at com.google.apphosting.utils.runtime.ApiProxyUtils.statusException(ApiProxyUtils.java:207)
at com.google.apphosting.utils.runtime.ApiProxyUtils.getRpcError(ApiProxyUtils.java:128)
at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.setRpcError(ApiProxyImpl.java:601)
at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.failure(ApiProxyImpl.java:589)
at com.google.apphosting.runtime.http.HttpApiHostClient.communicationFailure(HttpApiHostClient.java:170)
at com.google.apphosting.runtime.http.JettyHttpApiHostClient$Listener.onComplete(JettyHttpApiHostClient.java:141)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:193)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:185)
at org.eclipse.jetty.client.HttpExchange.notifyFailureComplete(HttpExchange.java:269)
at org.eclipse.jetty.client.HttpExchange.abort(HttpExchange.java:240)
at org.eclipse.jetty.client.HttpConversation.abort(HttpConversation.java:141)
at org.eclipse.jetty.client.HttpRequest.abort(HttpRequest.java:735)
at org.eclipse.jetty.client.HttpDestination.abort(HttpDestination.java:267)
at org.eclipse.jetty.client.PoolingHttpDestination.failed(PoolingHttpDestination.java:90)
at org.eclipse.jetty.client.DuplexConnectionPool$1.failed(DuplexConnectionPool.java:159)
at org.eclipse.jetty.util.Promise$Wrapper.failed(Promise.java:84)
at org.eclipse.jetty.client.HttpClient$1$1.failed(HttpClient.java:587)
at org.eclipse.jetty.client.AbstractHttpClientTransport.connectFailed(AbstractHttpClientTransport.java:152)
at org.eclipse.jetty.client.AbstractHttpClientTransport.connect(AbstractHttpClientTransport.java:141)
at org.eclipse.jetty.client.HttpClient$1.connect(HttpClient.java:592)
at org.eclipse.jetty.client.HttpClient$1.succeeded(HttpClient.java:569)
at org.eclipse.jetty.client.HttpClient$1.succeeded(HttpClient.java:562)
at org.eclipse.jetty.util.SocketAddressResolver$Async.lambda$resolve$1(SocketAddressResolver.java:181)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
... 1 more
根据我目前所做的调查,我相信这可能与我们使用的 Objectify 版本有关。我们在 objectify-4.0b1.jar
上。我尝试升级到 objectify 4.1,并且该站点版本同时工作,而 4.0 版本不工作。所以也许这与它有关?
我对将使用 objectify 4.1 的版本切换到生产版本犹豫不决,因为一旦您这样做,我们就无法切换回该站点的旧稳定版本。所以我想确保升级能够真正解决我们的问题。
更新 1
应用正常运行 22 小时后,应用再次出现故障并出现更多 Memcache 错误。我们尝试清除 Memcache,但没有做任何事情。 24 小时后,该版本的应用程序仍然无法运行。
我们通过使用完全相同的代码重新部署新版本克服了这个问题,它又开始正常工作了。 24 小时后,该版本仍然运行良好。
更新 2
我们切换到使用 Objectify 4.1.3 的版本,24 小时后该版本运行良好。
有关相关问题的额外信息
自从切换到 Java8+CloudSDK 以来,过去一个月我们还遇到了其他奇怪的问题。
例如,在随机时间(主要是太平洋标准时间周五下午),该站点会在某些计算机上停止正常工作。然后在 30 分钟左右后它会再次工作。一周后,同样的问题发生了。
在仔细阅读 Google Cloud SDK 的文档后,它说他们更改了 Cloud SDK 的默认暂存选项,因为 delete-jsps
是正确的,而 App Engine SDK 是错误的。我们的服务器正在从几个 JSP 文件中读取数据...所以这个更改破坏了我们的网站。
问题是,它在本地服务器上仍然运行良好,在实时服务器上,它在 99% 的时间里也运行良好。就好像他们是 AB 测试在随机时间更改该默认参数对一定百分比的实例的影响。这看起来很疯狂,因为他们本可以检查我们的数据日志并看到我们的网站正在从 jsp 文件加载和读取值。
一旦我们从 JSP 文件中删除该数据并将其放入单独的配置文件中,该问题就消失了。
Google 似乎又一次随机尝试对 Memcache 进行一些更改,这是否会在使用 Objectify 4.0b2 时完全破坏我们的网站?可行吗?
最佳答案
IIRC 在 4.0b2 和 4.1 之间,Objectify 使用内存缓存的方式发生了一些变化。虽然这似乎不太可能,但有可能这种使用模式可能会引发内存缓存中的某种潜在问题。
4.0b2 真的旧了 - 超过 4 年 - 从那时起修复了大量问题。迁移到当前版本是明智的。
关于java - 在随机时间段使用 Java Google App Engine Standard 的内存缓存中出现服务错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058798/
JavaScript Standard Style 翻译: Português, Spanish, 繁體中文, 简体中文 standard 规则列表,太多不必阅读。 了解 standard 的最好方式
我有一个 exec我使用 outputproperty 将其输出放入属性的任务属性。该命令可能会向 stderr 打印一些错误,我不希望将这些错误包含在输出中(因为输出被馈送到另一个命令中),而是要打
标题说明了一切 - 如何将 .NET 标准库标记为符合 CLS? 我用 C# 编写了一个简单的库,目标是 .NET Standard 1.0 框架。它包括两个枚举: public enum Align
我有一个写入错误输出的 PowerShell 脚本。该脚本可以简单如下: Write-Error 'foo' Start-Sleep -s 5 Write-Error 'bar' 我实际调用的脚本产生
对于完整的 .NET 项目,您可以在 Project Properties > Application tab > Assembly Information.. 中勾选一个框以使项目 COM 可见。
我将我的项目 ( https://github.com/MarkKhromov/The-Log) 迁移到 .NET Standard 2.0,但我的应用程序构建已损坏。我该如何解决这个问题? 我的解决
互联网上的许多文章都使用“标准输入/输出/错误流”术语好像每个术语都与使用的“标准输入/输出/错误设备”术语具有相同的含义在其他文章上。例如,很多文章说标准输出流默认是监视器,但可以重定向到文件、打印
我正在尝试从 https://github.com/go-yaml/yaml 导入 go-yaml ,并且我看到了 Google 未提供帮助的错误。 我运行了 go get gopkg.in/yaml
在列出 TimeZoneInfo.GetSystemTimeZones 返回的 TimeZoneInfo 的所有 Id 属性时,出现了两个版本的 EST:美国东部标准时间和东部标准时间。有什么区别?
问题: 如函数的 C 引用页所述,c16rtomb,来自 CPPReference ,在注释部分下: In C11 as published, unlike mbrtoc16, which conve
我想使用 go 语言从我的数据库中检索一些数据。这是我在文件 main.go 中的代码的开头 package main import ( _ "github.com/go-sql-driver
我一直在通过STM32F4发现进行音频项目,我注意到一件事,所有I2S标准仅适用于一个麦克风(取决于标准使用单独的位的哪个边缘)。例如飞利浦(Philips),MSB或LSB标准使用下降沿作为位触发,
有没有标准定义了 语法 和 语义的 汇编语言 ?与语言类似 C 有 ISO 标准和语言 C# 有 ECMA 标准?是只有一种标准,还是有更多标准? 我问是因为我noticed那个汇编语言代码看了不同
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 1年前关闭。 Improve this
我们正在内部构建API,并且经常传递带有多个值的参数。 他们使用:mysite.com?id=1&id=2&id=3 代替:mysite.com?id=1,2,3 我赞成第二种方法,但我很好奇是否真的
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我认为有很多人不知道RFC(征求意见)。我知道它们在逻辑上是什么,但是有人能为新开发人员提供一个很好的描述吗?另外,共享一些有关如何使用和阅读它们的资源也很好。 最佳答案 这个术语来自互联网的前身AR
我找不到 Somaliland 的两个字母的国家/地区缩写,可能是因为它不是一个国家,而是正如维基百科所说:“一个未被承认的 self 宣布的事实上的主权国家,被国际承认为索马里的一个自治区”。尽管如
我正在编写一款蜜 jar 软件,该软件将对其交互进行大量记录,我计划记录纯文本 .log 文件。 我有两个问题,来自不太熟悉服务器日志方式的人。 首先,我该如何分解我的日志文件,我假设运行一个月后我不
我最近负责调试两个不同的程序,这两个程序最终至少需要共享一个 XML 解析脚本。一个是用 PureMVC 编写的,另一个是从头开始构建的。虽然最初从头开始编写是有意义的(它节省了大量内存,但内存问题已
我是一名优秀的程序员,十分优秀!