我从2015年3月开始使用Google AppEngine托管VM / Java。一切都运行良好。但是在2015年10月9月之后,我注意到我经常在托管虚拟机实例日志中看到“com.google.apphosting.vmruntime.VmApiProxyDelegate”的错误日志。
我发现了2组错误日志。
第一个与托管VM实例上的数据存储区操作有关。它发生在
我在日志中看到的堆栈跟踪示例如下......(下面的示例是针对datastore_v3.Put())
com.google.apphosting.vmruntime.VmApiProxyDelegate runSyncCall:HTTP datastore_v3.Put的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)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:745)
因此,当发生此错误时,在应用程序级别(我的代码),我得到RPCFailedException但是现在,我没有使用重试机制来处理它(我只使用与App Engine数据存储区API的ConcurrentModificationException的重试机制)
第二组错误日志是关于托管VM上的TaskQueue API。
我收到的错误信息是......
com.google.apphosting.vmruntime.VmApiProxyDelegate runSyncCall:错误 body:RPC错误:/StubbyService.Send到(未知):APP_ERROR(2)
跟踪时,详细的堆栈跟踪是......
com.wat_suttiwat.batchengine.job.PushNotificationTaskExecutor executeTask:应用程序服务器的远程RPC失败 调用taskqueue.QueryAndOwnTasks()。 com.google.apphosting.api.ApiProxy $ RPCFailedException:远程RPC 到应用程序服务器失败的呼叫 taskqueue.QueryAndOwnTasks()。在 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.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:745)
在应用程序级别引发的“RPCFailedException”异常(与第一种情况一样)。我注意到了谷歌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
如果您有任何解决方法,请分享。
非常感谢