私は 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);
}
クライアントがクラッシュしたときに、サーバー ログに何かが記録されているはずですか?