2

簡単なASPサーブレットを使用して(ADOを使用してデータを取得する)AJAXJSONストリームを提供する複雑なアプリがあります。任意のセッションで、これらのリクエストのうち10〜20個を同時に起動できます。負荷がかかると予想していたよりもはるかに早く、重大なパフォーマンスの問題が発生しました。(サーバーはデュアルXEON、RAID 5、4GBなどです)。perfmonを調べてみると、「RequestsExecuting」の数値が永続的に1のままになっていることがわかりました。これ以上高くなることはありません。調査によると、20〜50の数は珍しいことではありません。キューに入れられたリクエストは10〜20前後でホバリングし、待機時間も増加します。

ASPProcessorThreadMaxをデフォルトの25から40に設定しましたが、効果はありません。一度に1つのリクエストしか処理できないようですが、言うまでもなく、それは機能しません。この特定の問題を説明するものは何も見つかりません。アニーの助けは大歓迎です。

4

1 に答える 1

1

ASPセッションオブジェクトは、シングルスレッドアパートメント(STA)に制限されています。その結果、同じセッションのASPスクリプトへの要求は、順次処理することしかできません。

複数のセッションにわたってASPスクリプトの実行が1つしか表示されない可能性があるもう1つの理由は、ASPのデバッグが有効になっている場合です。これにより、ASP処理はASPProcessorThreadMaxを無視し、1に設定されているように見せかけます。

この問題を解決するには、デバッグが有効になっていないことを確認し、 「セッション状態を有効にする」をオフにします。コードでSessionオブジェクトを使用している場合は、DBでバックアップされた状態などの代替手段を見つける必要があります。

ただし、ライブプロダクションでは、アクティブな同時セッションがいくつ期待されていますか?おそらく、全体的なユーザーエクスペリエンスは、セッションごとのリクエストのシリアル化によって実際に影響を受けることはありません。

于 2012-06-13T13:07:28.327 に答える