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

はい、Remote_Loggingを使用できます

https://code.google.com/p/gwt-log/もあります

これにより、次のようないくつかのオプションが提供されます

于 2013-04-15T10:45:45.727 に答える
0

you を使用dev-modeすると、大きなアプリや大量の jsni を使用するアプリですぐにメモリとパフォーマンスの問題が発生します。これは、開発モードのアーキテクチャ上、IDE とブラウザー プラグイン間の複雑な通信プロセスが必要であり、JVM と JS の間で実行コンテキストが頻繁に切り替えられるためです。

複雑なものをデバッグするには、スーパー開発モードを使用することをお勧めします。これは、ブラウザーで JavaScript のみを実行し、ブラウザーでアプリをデバッグするための優れた方法 ( s​​ource -maps ) を提供しますが、Java ソースを使用します。

スーパー開発モードのセットアップはもう少し複雑で、特にバックエンドと通信する必要がある場合は、リロード プロセスが少し遅くなることに注意してください。また、IDE Java デバッグ コンソールを見逃す可能性があることに注意してください。しかし、試してみる価値があります。

于 2013-04-17T10:01:45.043 に答える