自 2015 年 3 月以来,我一直在使用 Google AppEngine Managed VM/Java。一切正常。但在 2015 年 10 月 9 月之后,我注意到我经常在托管 VM 实例日志中看到“com.google.apphosting.vmruntime.VmApiProxyDelegate”的错误日志。
我注意到了 2 组错误日志。
第一个与托管 VM 实例上的数据存储操作有关。它发生在
- datastore_v3.Get()。
- datastore_v3.RunQuery()
- datastore_v3.Put()
- 内存缓存.Get()。
我在日志中看到的堆栈跟踪示例如下...(以下示例用于 datastore_v3.Put())
com.google.apphosting.vmruntime.VmApiProxyDelegate runSyncCall:datastore_v3.Put 的 HTTP ApiProxy I/O 错误:读取超时
com.google.apphosting.api.ApiProxy$RPCFailedException:到应用程序服务器的远程 RPC 调用 datastore_v3.Get() 失败。在 com.google.apphosting.vmruntime.VmApiProxyDelegate.runSyncCall(VmApiProxyDelegate.java:182) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate.makeApiCall(VmApiProxyDelegate.java:141) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate.access $000(VmApiProxyDelegate.java:47) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:375) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:351)在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent。
所以,当这个错误发生时,在应用程序级别(我的代码),我得到了 RPCFailedException 但现在,我没有用重试机制处理它(我只使用 App Engine Datastore API 的 ConcurrentModificationException 重试机制)
第二组错误日志是关于托管 VM 上的 TaskQueue API。
我得到的错误信息是......
com.google.apphosting.vmruntime.VmApiProxyDelegate runSyncCall:错误正文:RPC 错误:/StubbyService.Send to(未知):APP_ERROR(2)
跟踪时,详细的堆栈跟踪是...
com.wat_suttiwat.batchengine.job.PushNotificationTaskExecutor executeTask:调用 taskqueue.QueryAndOwnTasks() 到应用服务器的远程 RPC 失败。com.google.apphosting.api.ApiProxy$RPCFailedException:调用 taskqueue.QueryAndOwnTasks() 到应用服务器的远程 RPC 失败。在 com.google.apphosting.vmruntime.VmApiProxyDelegate.runSyncCall(VmApiProxyDelegate.java:161) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate.makeApiCall(VmApiProxyDelegate.java:141) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate.access $000(VmApiProxyDelegate.java:47) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:375) 在 com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:351)在 java.util。
在应用程序级别引发的“RPCFailedException”异常(如第一种情况)。我注意到 Google AppEngine 前端实例(不是托管 vm 实例),它照常工作,这些都没有错误。
所以我的问题是
我应该为 RPCFailedException 添加重试机制吗?添加重试有用吗?我没有从 Google AppEngine 文档中看到任何关于此的文档。
有没有人和我有同样的问题?如果是,请帮助在此问题跟踪器 (#12393) 上对问题进行投票: https ://code.google.com/p/googleappengine/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type %20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log&groupby=&sort=&id=12393
如果您有任何解决方法,请分享。
非常感谢