2010年4月10日土曜日

BlazeDS 入門記(Measuring message processing performance)

Additional programming topics / Measuring message processing performance

About measuring message processing performance

メッセージ処理に関する箇所の時間やサイズ等のパフォーマンスを測定するという話。

  • パフォーマンス測定機能はデフォルトでは disabled。
  • パフォーマンス測定機能を enable にすると、メッセージサイズ、サーバ処理時間、ネットワーク通信時間を測定可能。メッセージをサーバにプッシュしたクライアントや、サーバからプッシュされたメッセージを受信したクライアントや、プッシュしたメッセージの応答を受けたクライアントで測定可能。
  • 部分的な情報はサーバでも確認可能。
  • BlazeDS のプロキシを使わないで外部サーバとやり取りする場合には、パフォーマンス測定を利用できない。
  • メッセージ処理のメトリクスは MessagePerformanceUtils で定義される。Producer が ack を受けたときや Consumer がメッセージを受けたときに、このクラスのインスタンスにデータが格納され、そのプロパティを確認することによりパフォーマンスを確認できる。
  • メッセージを受け取った場合に、メッセージ送信元を特定する情報を得ることはできないらしい。
  • ポーリングではない本当のリアルタイムメッセージでは、networkRTT、serverPollDelay、totalTime は測定できないので 0 が入る。
  • 以下、一部のメッセージ処理メトリクスの説明
    • clientReceiveTime : クライアントが応答メッセージを受け取った時間。UNIX時刻のミリ秒。
    • messageSize :クライアントのオリジナルメッセージのバイト数で、サーバの endpoint でデシリアライズされたサイズ。
    • networkRTT : totalTime - serverProcessingTime。メッセージの送信から受信までの時間からサーバ処理時間を抜いたものなので、純粋にネットワーク通信の時間となる。ストリーミングの場合は無意味なので0が入る。
    • originatingMessageSentTime : クライアントがメッセージを投げた時間。ackは対象外。
    • originatingMessageSize : 元のメッセージサイズ。ackの場合は対象外。
    • pushedMessageFlag : ポーリングではない真のプッシュの場合には true になる。ackは対象外。
    • pushOneWayTime : プッシュされたメッセージの送信から受信までの時間。クライアントとサーバの時計が合っていることが前提。ackは対象外。
    • responseMessageSize : 応答メッセージのサイズ。サーバ側の endpoint でシリアライズしたときのサイズ。
    • totalPushTime では Producer と Consumer の時計が合っていなければ値の信頼性が損なわれる。
  • pushOneWayTime ではサーバと Consumer の時計が合っていなければ値の信頼性が損なわれる。
  • タイミング情報だけを収集するテストと、サイズ情報を収集するテストは別で行い、最後のそれらをあわせたテストをすべき。タイミング収集をするときにサイズ情報を収集すると、誤差が大きくなる。

Measuring message processing performance

  • 機能の enabled / disabled はチャネル定義の record-message-times と record-message-sizes 要素で設定する。
  • new MessagePerformanceUtils(event.message) みたいな感じでOK。
  • prettyPrint() メソッドで情報の文字列化をお手軽に行える。

TODO:実際にやってみたけど、totalTime とか networkRTT がマイナスの巨大な値になる。なぜに?要調査。

0 件のコメント:

コメントを投稿