1

30MB の xml データを送信する必要があるクライアントがいます。データはバイナリ形式であり、高度に暗号化されています。クライアントが Tomcat で実行されているサーブレットにヒットし、サーブレット経由でデータを取得しますrequest.getParameter("_xmldata");

問題は、30MB のデータを String 変数に移動するだけで約25 秒かかることです。だから私の頭の中で、2つの質問があります:

1) それはなぜですか?

2) これを改善できる方法はありますか? (ユーザーに FTP / SSH 経由で送信してもらうことは別として)

サーバー環境:-

  • CPU: クアッドコア Xeon 5540
  • サーバーメモリ: 4GB
  • Tomcat ヒープ: 2GB
  • ハードディスク:500GB
4

1 に答える 1

1

getParameterメソッドは、受信するリクエスト内の必要なデータをまだ待機していると推測します。これは、Wiresharkなどでサーバーを監視することで確認できます。

必要なすべてのHTTPリクエストヘッダーはすでに受信されています。これは、サーバーがリクエストの処理を開始するのに十分です。ただし、一度呼び出すとgetParameter、「フィールド」全体が受信されるのを待っている可能性があります。クライアントとサーバー間の帯域幅を確認してください。私はそれがCPUの問題であるとは非常に疑っています(クアッドコアは必要ありません)。

_xmldataリクエストのフィールドの前後に小さなテストテキストフィールドを配置することで、これをある程度確認できます。の周りのこれらのフィールドのみを読み取ります_xmldata。最後を読み込もうとすると、これまで観察してきたのとほぼ同じ遅延が発生すると思います。

(リクエストパラメータを介してバイナリデータを受信する方法にも注意します。さらに、それをString変数に移動します。Base64エンコーディングのようなものでエンコードされることを望んでいます...)

于 2012-01-19T03:23:42.850 に答える