6

環境: Windows Server 2003; IIS 6、ASP.NET 2.0.50727

私たちがセットアップした真新しい Web サーバーに夢中になっています (この問題は、同じ構成の他の Web サーバーでは発生しないことに注意してください)。初めて asp.net アプリをロードすると、ブラウザにページが表示される前に、ページが 1 分以上ハングします。最初のページを読み込んだ後は、すべてが非常に高速に実行されます。

注 1: おそらく、アプリケーションが初めてコンパイルされると言うでしょう。しかし、私はそれを除外しました。アプリのどこにでもトレース メッセージを配置すると、すべてのトレース メッセージがページをリクエストしてから 1 秒以内に実行されます。したがって、アプリはすぐにコンパイルされて実行されます。しかし、アプリがページのレンダリングを終了し、最後のトレース メッセージが出力されると、何も起こりません。IIS は、完成したページを http 経由でユーザーのブラウザに転送する前に、1 分間バックグラウンドで何かを行っています。

注 2: 最初にアプリを起動して問題なく動作した後、1 時間待つと再び遅延が発生することがわかりました。したがって、IIS のキャッシュには、1 時間後に消去され、サイトが再び停止する原因となるものがあります。

注 3: 各テストの間に、IIS を停止/開始して、アプリのロード時に IIS を強制的にハングさせます。

注 4: タスク マネージャーを監視して、IIS が急増し、何かを処理するために多くのリソースを占有していないかどうかを確認しました。しかし、それだけではありませんでした。ブラウザーがページを表示する直前に 50% まで非常に急激なスパイクが見られましたが、その前の 60 秒間、サーバーの使用率は 1% しかありませんでした。

注 5: 別のテストで、HelloWorld.html ページを作成しましたが、IIS がハングすることはありません。したがって、レンダリングされたページを http 経由で最初に送信するときに、ASP.NET ライブラリを呼び出すことと関係があります。また、アプリは既にコンパイルされており、すぐに実行されるため、レンダリングされたページをユーザーのブラウザーに送信する asp.net の部分だけが遅延の原因です。

何か案は?私たちはここで損失を被っています。他のすべての Web サーバーは同じようにセットアップされ、正常に動作しますが、これは新規インストールです。構成設定が抜けていたり、何かをインストールする必要があるのではないでしょうか?

ありがとう、

ブライアン

4

3 に答える 3

1

サーバーにアクセスできる場合は、アプリ プールのリサイクルが実際にイベント ログに記録されていることを確認してください。

cscript adsutil.vbs get w3svc/AppPools/DefaultAppPool/LogEventOnRecycle

cscript adsutil.vbs ですべてをログに記録するように設定できます w3svc/AppPools/DefaultAppPool/LogEventOnRecycle 255 を設定します

詳細はこちら

次に、リサイクルがあったかどうかを確認します。

アプリの初期化、ワーカー プロセスの作成、スレッド、アプリ ドメインの読み込み、およびすべての参照 dll には時間がかかる場合があります。

サーバー上でアプリをプリコンパイルして、それが aspnet_compiler -m /LM/W3SVC/[site id ]/Root/[your appname] に役立つかどうかを確認してください。

さらに深く掘り下げたい場合は、イベント トレース ETW を確認できます。

  1. logman クエリ プロバイダー
  2. IIS/ASP.NET 関連の Guid を iisproviders.txt のようなファイルに保存します。
  3. logman start ExampleTrace -pf iisproviders.txt -ets -rt
  4. 再現する
  5. LogParser "SELECT * FROM ExampleTrace" -i:ETW
  6. logman stop ExampleTrace -ets

詳細については、アプリドメインの再起動のトラブルシューティングと ETW トレースに関するその他の問題を参照してください。

また、TCP 接続のタイムアウトがある場合は procexp を使用して w3wp.exe をチェックし、他の手がかりについては Procmon を使用してチェックします。

Windbg の経験がある場合は、アプリにリクエストを送信して、デバッガーをプロセスにすばやくアタッチできます。

windbg -p [process id of the app pool]
.loadby sos mscorwks
g

そしてそこから取ります。例外、プロセスのクラッシュなどがある場合は、それをキャッチできるはずです...

このような奇妙なサーバーの問題が発生し、.NET の再インストールによって問題が解決された後も、何が原因なのかはまだわかりません。

于 2012-09-28T19:13:36.480 に答える
0

確認したいことの 1 つは、ページの読み込み時にデータベース アクセスが行われているかどうかです。これにより、最初のページの読み込み中にページの作成がブロックされている可能性があります。次に、クエリが (db エンジンまたは memcached などの別のキャッシュ メカニズムによって) キャッシュされると、その後のページの読み込みは通常どおりに機能します。

前回のコメントの通り、

IIS を複数回停止/開始することができ、アプリは常に即座に実行されました。私はそれが永久に修正されたと思った。しかし、今、もう一度試してみました (過去数時間アイドル状態になっていました) が、最初の要求でハングするようになりました。

これは、キャッシュの有効期限が切れたため、データベースに再度アクセスする必要があり、ページの読み込みが遅れていることを意味している可能性があります。

于 2012-11-24T23:36:26.963 に答える
0

このボックスの aspnet.config 設定が他とは異なる可能性があります。構成ファイルをこのサーバーにコピーしようとしましたか? ページの初期ロード中の遅延時間を取り除くために実行できるレジストリの変更に加えて、証明書オプションがあるようです (プリコンパイルは別として)。

こちらとこちらをご覧ください

于 2012-08-30T20:07:56.290 に答える