2012-04-20 20 views
0

アプリケーションサーバーとしてJbossを使用し、データベースサーバーとしてMS SQLサーバーを使用する3層のJavaアプリケーションがあります。ローカルマシンよりもTCP/IPのほうがはるかに遅い

私たちは、同じマシン上でJbossとDBサーバーを実行すると、別々のマシン上にある場合のパフォーマンスが50%以上向上することがわかりました。このような大きな違いを説明するには? JbossとDB Serverが稼働するマシンは、(インテルCPUが使用可能な)最高のワークステーションであり、ネットワークはビジネス標準インフラストラクチャを備えた1Gb Ethernetです。

私たちのネットワーク(レイテンシ、スループットなど)に問題があると思われますが、その違いを説明できる理由がいくつかありますか?

答えて

1

まあ、あまりにも多くの可能性がある:通信サービス 4の 1)ネットワーク設定 2)ファイアウォール 3)実施)など

私は、すべてのサービス、オプション、フィルタを無効にすることをお勧めし、 1つ1つを有効にしようとします。 これで解決しない場合は、コードを確認してください。

幸い、簡単ではありません!

2

次の要因は、潜在的にDBにアクセスする際に、上記の場合に

1)ネットワークレイテンシ性能に影響を与える可能性がローカルマシンでは、1ms未満であろう。 DBサーバー&アプリケーションサーバーが別の場所にある場合は、待ち時間が長くなります。特定の要求を処理するための "n"個のDBコールを行うと、遅延はn * 2 *レイテンシになります。

解決方法:通話回数を減らしてください。参照データセットにはキャッシングを使用します。

2)アプリケーションサーバーへのアクセスの場所:ユーザーが米国&にいる場合、アプリケーションサーバーはインドにあり、ネットワークの待ち時間は約200msになります。多くのCSS & jsファイルがページにロードされていると、使用されるブラウザによっては多くの遅延が発生します。

解決方法:すべてのjsファイルを1つのファイルにまとめます。 js & cssにはGZipを使用してください。 JSを縮小する。ブラウザキャッシュを効果的に使用する。

3)上記の2つがボトルネックでない場合は、アプリケーションがデプロイされているサーバーでCPUのメモリ&ディスク速度を確認します。

1

構成を知らないSQL Serverは、既定で名前付きパイプをトランスポートとして使用します。ローカルでは、これはTCP/IPより速いインメモリ内プロセス通信になります。リモートの場合、パイプはTCP/IPを介して転送する必要があります。これにより、TCP/IPスタックのマーシャリング/アンマーシャリング(実際の転送と同様)のオーバーヘッドが追加されます。

TCPを使用していますが、実際には名前付きパイプをローカルで使用している可能性があります。あなたの接続文字列はどのように見えるのですか?

関連する問題