我正在开发一个GWT-GAE Java交易应用程序,客户端在服务器上下订单,然后通过客户端(通过AppEngine Channel)通知更新。我的问题是我遇到了不规则的客户端崩溃 - 交易后5到10分钟,客户端可能会崩溃(在Chrome中我看到这个页面:chrome:// crash /)。我在生产中测试了这个,最多10个同时交易者(在不同的机器上)交易30分钟,我通常会遇到4或5个独立的客户端崩溃。由于连接数量减少或交易活动减少,我看不到崩溃。
我认为问题可能是ConcurrentModificationExceptions,所以我尝试了1)使用延迟命令和Scheduler.get()。scheduleDeferred,以及2)实现Message队列,但这些都没有帮助。
我的问题是 - 如何调试?在开发中,我在出现内存错误之前可以进行的同时连接数量(2或3)受到限制,因此我无法复制我的问题。有没有办法看到导致这些崩溃的生产中抛出了哪种异常?
我查看了GWT logging mechanism - 我是否可以在服务器上记录标签崩溃?
谢谢!
我已经设置了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);
}
当客户端崩溃时,我是否应该在服务器日志中看到某些内容?
答案 0 :(得分:0)
是的,您可以使用Remote_Logging
还有https://code.google.com/p/gwt-log/
为您提供了更多选项,例如
自定义网址
格式化
https://code.google.com/p/gwt-log/wiki/GettingStarted#Server_side_log_messages
-------------- EDIT --------------
您是否尝试过UncaughtExceptionHandler?
//安装一个UncaughtExceptionHandler,它将生成FATAL
个日志消息
Log.setUncaughtExceptionHandler();
答案 1 :(得分:0)
使用dev-mode
您很快就会遇到大型应用程序或使用大量jsni的应用程序的内存和性能问题。这是由于开发模式的体系结构需要IDE和浏览器插件之间复杂的通信过程,以及JVM和JS之间频繁的执行上下文切换。
要调试复杂的东西,最好使用super-dev mode,它只会在浏览器中执行javascript,并提供一种很好的方式(source-maps)来调试浏览器中的应用程序,但是使用你的java源代码。
请注意,超级开发模式设置有点复杂,特别是当您需要与后端通信时,重新加载过程有点慢,并且请注意您将错过IDE java调试控制台。但值得一试。