0

我正在开发一个 GWT-GAE Java 交易应用程序,客户在其中下订单,在服务器上处理,然后通知客户(通过 AppEngine 频道)更新。我的问题是我遇到了不规则的客户端崩溃 - 交易 5 到 10 分钟后,客户端可能会崩溃(在 Chrome 中我看到此页面:chrome://crash/)。我已经在生产中测试了这一点,最多有 10 个同时交易者(在不同的机器上)交易 30 分钟,我通常会遇到 4 或 5 个独立的客户端崩溃。由于连接较少或交易活动较少,我看不到崩溃。

我认为问题可能是 ConcurrentModificationExceptions,所以我尝试 1) 使用带有 Scheduler.get().scheduleDeferred 的延迟命令,以及 2) 实现消息队列,但这些似乎都没有帮助。

我的问题是 - 我该如何调试?在开发过程中,在出现内存错误之前我可以同时建立的连接数(2 或 3)是有限的,所以我无法复制我的问题。有没有办法查看导致这些崩溃的生产中引发了哪些异常?

我查看了GWT 日志记录机制- 我可以在服务器上记录选项卡崩溃吗?

谢谢!

更新

我已经设置了 gwt-log,但是当我重现我的客户端崩溃时,它似乎没有记录它。它记录各种其他信息,但客户端崩溃时没有错误。在客户端上,我有一个围绕频道消息的 try-catch:

try {
  SerializationStreamReader reader = ((SerializationStreamFactory)rpcService).createStreamReader(encodedData);
  Message message = (Message) reader.readObject();
  Log.info(name + ": " + message.toString());
  processMessage(message);
} catch (Exception e) {
  Log.fatal(name + ": error encoding " + encodedData);
}

当客户端崩溃时,我是否应该在服务器日志中看到某些内容?

4

2 回答 2

0

使用dev-mode你很快就会遇到大型应用程序或使用大量 jsni 的应用程序的内存和性能问题。这是由于开发模式的架构需要IDE和浏览器插件之间的复杂通信过程,以及JVM和JS之间频繁的执行上下文切换。

要调试复杂的东西,最好使用super-dev 模式,它只会在你的浏览器中执行 javascript,并提供了一种很好的方式(source-maps)在你的浏览器中调试应用程序,但使用你的 java 源代码。

请注意,超级开发模式设置有点复杂,特别是当您需要与后端通信时,重新加载过程有点慢,并且请注意您会错过您的 IDE java 调试控制台。但值得一试。

于 2013-04-17T10:01:45.043 回答
0

是的,您可以使用Remote_Logging

还有https://code.google.com/p/gwt-log/

这为您提供了更多选择,例如

于 2013-04-15T10:45:45.727 回答