2012-01-10 15 views
15

(申し訳ありませんが、これは本当に長い質問ですが、具体的であると言われています)ASP.NET 2.0-4.0 Webアプリケーションの初期起動が非常に遅い。

私が働いている会社は、問題なくしばらくの間実行されている多数のサイトを持っています。アプリケーションは、ASP.NET 2.0、3.5、および4.0を組み合わせたもので、すべてADO.NETを使用してIIS7でホストされているSQL Server標準インスタンス(同じWebサーバー上)に接続します。

問題は、アップグレードされたWebサーバーに移動したときに始まりました。私たちは、サーバ、dbインスタンス、IISをまったく同じ設定(異なるマシン名とSQLExpressからStandardにアップグレードしたという事実を除く)でセットアップするよう努力しました。 。どちらのサーバーもWindows Server 2008 R2(現在のすべての更新が適用されています)を実行しており、既定のインストールを受け取りました。

これらのアプリケーションのいずれかを起動すると、この問題が非常に顕著になります。アプリケーションのログインページに達すると、ページ自体が非常に高速に読み込まれます。これは、ページがキャッシュされていない可能性のある新しいマシンからページをロードしても、IISのキャッシュを無効にしても同じです。この問題は、ログイン情報を入力してログインボタンをクリックすると実際に表示されます。理論的には最大150個の別個のデータベースにアクセスする必要がありますが、実際には通常は2です。この問題は最小限のデータベースが2つしか開いていない場合でも発生します。素晴らしいデザインではありませんが、私たちは今のところそれと一緒に生活しなければなりません。

データベースへの接続を最初に開こうとすると、2 dbsまたは40に接続しているかどうかにかかわらず、毎回約20秒間プロセスが停止します。.NETプロファイラ(jetbrains dottrace)プロセス、およびそれから取得できる唯一の情報は、sqlconnection.open()への呼び出しの1つまたはすべてが90%の時間を占めていたということでした。これはアプリケーションの初回使用時にのみ発生しますが、IISが設定したリサイクル設定を無視して数分待ってからアプリケーションをリサイクルして問題が再び発生する。

また、SQL Serverプロファイラを使用して、どのデータベース操作が減速の原因であるかを確認しようとしましたが、他のすべてのDBアクティビティ(および本番サーバーでこれを行う必要があったという事実問題は私たちのテスト環境では起こりません)私は停止を引き起こしていた正確な操作をピン止めできませんでした。私は夜遅くに入ってSQLプロファイラを実行するために本番サイトをシャットダウンしようとしますが、すぐにこれを行うことはできません。

問題を調査の過程で、私はそれが名前解決の問題があるかもしれない考えのカップルのソリューションに

  • を試してみましたが、私が変性するホストのウェブサーバ上のファイルなどのconnectionStringsを与えるの両方を試してみました解決するサーバー名の代わりにIPアドレス、違いはありません。私はこのような問題を引き起こすLLMNRプロトコルについて聞いたことがありますが、私はIPで接続しようとしたり、ホストファイルで解決しようとするとその可能性がなくなったはずです。

  • IISでアイドルタイムアウト、リサイクル間隔などを増やしましたが、これは尊重されていないように見えます。これは、マシン上のIISアプリケーション設定を上書きする設定があると信じさせます。

  • 他にも複数のコード修正がありますが、いずれも違いはありません。 SqlServerの設定で問題が発生していますか?

  • 他のものは私が今忘れてしまったものです。

この問題を解決するのに役立つアイデア、エクスペリエンス、またはwhitversがあります。

+0

速度に違いがあるかどうかを確認するために、古いSQLExpress DBに接続しようとしましたか?テスト(単純なSQLのもの)として1 dbに接続するのはどうですか? – webdad3

+0

残念ながら、私たちは、古いインスタンスに接続するオプションがありません。いったん新しいサーバーを稼働させたら、古いサーバーをフォーマットし、何か別のものに再利用しました。たとえインスタンスがまだ存在していても、私たちのシステムを物理的に配備しても、両端のファイアウォールやその他のものではなく、古いサーバーに接続することはできません。 – Caleb

答えて

16

あなたはまだローカルマシン上のSQLインスタンスを実行している場合、私は非TCP接続を使用して助言します。 SQL Serverはいくつかのプロトコルをサポートしています。つまり、tcp、名前付きパイプ、共有メモリが一般的です。

名前付きパイプ

Data Source=np:computer\instance 

共有メモリ

Data Source=lpc:computer\instance 

は個人的に私は、共有メモリを好みます。これらのプロトコルを有効にする必要があることを忘れないでください。設定ミスを避けるために、使用していないものをすべて無効にすることをお勧めします。

http://msdn.microsoft.com/en-us/library/ms187892.aspx

はIISアイドルタイムアウトを設定するには、2つの方法があるIIS7で

をリセットしてご覧ください。どちらも、[アプリケーションプール]セクションをクリックし、適切なアプリドメインを右クリックして開始します。 「リサイクル...」オプションをクリックすると、1つの設定があります。他には「プロセスモデル」のセクションの下に「...詳細設定」であるあなたは、「アイドルタイムアウト(分)」をゼロに設定プロセスのタイムアウトを無効にするでしょう。この後のオプションは私たちのために働くものです。

もし私があなただったら、最初にこの問題を解決しました。なぜなら、あなたは20秒遅れていなくても、appdomainやワーカープロセスを再起動すると常に痛いです。

1

いくつかのアイデア:

  • Webサーバーからは、あなたは、DBサーバにpingを実行し、「正常な」 応答、またはあなたが同様の遅延を見ているを得ることができますか?
  • 遅延が発生している場合は、tracertを実行して低速が発生している場所を特定できるかどうかを確認してください。
  • QueryExpress(http://www.albahari.com/queryexpress.aspx)インストールを実行する必要はありません。このEXEをダウンロードしてWebサーバーから実行できます。あなたがこれを使ってあなたのデータベースに接続して、通常の方法でクエリを実行できるかどうかを確認してください。
  • あなたのオープン接続を見て、あなたのサーバー上で起こって、どのくらいのデータでいるものの活動を参照するSysInternalsのTcpView(http://technet.microsoft.com/en-us/sysinternals/bb897437)のようなものを試してみてくださいあなたのdbサーバーと送受信されています。

私はあなたの問題の説明に基づいて見始めるところにちょっとした初期の考えをしています。私はこれが役立つことを願っています物事に幸運! IISで

+0

実際には、WebサーバーとDBサーバーは同じものです。私たちはIISを実行しており、同じマシン上のSQLServerインスタンスに接続しているため、ページが提供されるまでネットワークトラフィックは発生しません。 (とにかくそのラックの内部トラフィックのためにローカルに隔離されたネットワークがあります)私はあなたの他の提案をどうにかして試してみましたが、IISの外部で動作するプログラムは問題なく接続でき、適切に動作する「ウォーミングアップ」ランまで。 – Caleb

0

は、リサイクルの設定を尊重しない:動作を変更し、再起動/ IISを再起動しましたか?

+0

複数回、再起動してもサーバー自体をコールドブートしても変更はありません。 – Caleb

+1

SQL ServerとIISが同じボックスにあることに言及しました。 WMI /リソースモニタリングには何も表示されませんか?マシンの設定ファイル/ Webサイトの設定ファイルに何か異常がありますか(IIS7とASP.NETはIIS6よりも結合されています)? – Leon

関連する問題