2012-01-19 3 views
1

30MBのxmlデータをポストする必要のあるクライアントがあります。データはバイナリ形式であり、高度に暗号化されています。私のサーブレットがTomcat上で実行されているにヒットクライアントは、その後、私は サーブレット問題があるrequest.getParameter("_xmldata");Tomcat request.getParameter( "_ xmldata")は30MBのデータに対して25秒かかります

を介してデータを取得し、それは単なる文字列変数に30メガバイトのデータを移動するために周り25secondsをとります。 私の頭の中には、2つの質問があります:

1)なぜそうですか?

2)私はこれを改善することができますか? (離れてFTP/SSH経由で送信するために、ユーザの取得から)

サーバ環境: -

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

コードなしでは何もできません。 –

答えて

1

私は、getParameterメソッドがまだ必要なデータを待っていると推測しますご要望にお応えします。あなたはWiresharkのようなものであなたのサーバを監視することでこれを確認することができます。

要求されたすべてのHTTP要求ヘッダーがすでに受信されています。これは、サーバーが要求の処理を開始するのに十分です。しかし、getParameterに電話すると、「フィールド」全体が受信されるのを待っている可能性があります。クライアントとサーバー間の帯域幅を確認します。私はそれがCPUの問題であることを非常に疑う(クワッドコアを必要とするものは何もない)。

リクエスト内の_xmldataフィールドの前後に小さいテストテキストフィールドを配置することで、これを幾分確認できます。 _xmldataの前後のこれらのフィールドのみを読み取ります。私は最後のものを読もうとする試みがあなたが観察していたのと同じ遅延に遭遇すると思います。

(私はリクエストパラメータでバイナリデータを受け取る方法について慎重であり、さらにString変数に移動しています。Base64エンコーディングのようなものでエンコードされていることを期待しています...)

+1

ネットワークの帯域幅も私が疑うところです。私は、私たちの生産面に非常によく似た無線環境でシミュレーションテストを行っています(gワイヤレスネットワーク、すなわち、15人のアクティブユーザーと54Mbの帯域幅共有を意味します)。私は、サーバー自体でシミュレーションコードを実行します。それがより速く走るかどうか見てください。 – Reusable

+0

問題が見つかりました!間違いなくネットワークです!ローカルホストマシンで同じコードをテストしたところ、速度は300msでした。私は他のサーバーからクロスケーブルを使用していますが、それはわずか700msです。私はサーバーからサーバーにテストするとき、それはわずか3秒です。私たちのルーターがクライアントマシンとサーバーファームネットワークの間で論理ゾーニングを行っているため、サーバーとの無線LANの主な理由は遅いです。そしてボトルネックは実際にルータにあります。 – Reusable

関連する問題