質問

注記:これが Stack Overflow と Serverfault のどちらに適しているのか判断できませんでした。その点について何か洞察がある場合は、お知らせください。

背景: 最近、私のサーバー (Windows 2000、MS SQL 2005、IIS 5.0、ASP Classic) で、特定の ASP ページのセットへのトラフィックが急増しました。このスパイクによりプロセッサに大量の負荷がかかり、プロセッサが 100% に達し、訪問者にあらゆる種類のタイムアウトの問題が発生しました。

実際、これよりも大量のトラフィックをエラーなしで処理しました。問題は、呼び出される特定の ASP スクリプトが大量のプロセッサ時間を使用していることにあるようです。Sysinternals の Process Explorer を使用すると、dllhost.exe がプロセッサ時間をすべて占有していることがわかりました。スレッドを見ると、原因は COMSVCS.DLL の呼び出しでした。これは COM+ オブジェクトであると思われます。

つまり、ASP ページが COM+ オブジェクトを呼び出しているため、プロセッサが強制終了しているようです。

質問は次のとおりです。 ASP スクリプトのどの部分が COM+ オブジェクトを呼び出しているかを確認するにはどうすればよいですか?また、これらの部分からパフォーマンスを向上させるにはどうすればよいですか?私には基本的に Windows プログラミングの経験がないので、どうやって始めればよいのか戸惑っています。

ご協力いただきありがとうございます。

役に立ちましたか?

解決

COM+ も DLLHOST も問題ではない可能性が高く、これらは Web サイトと COM オブジェクトが実行されているコンテナーにすぎません。それらが「供給」されている実際のオブジェクトは、問題、および/またはWebアプリによって呼び出される方法/頻度です。

問題を切り分けるより生産的な方法は、処理時間が最も長いページの IIS ログを調べ、そのページで何が起こっているのか、どのオブジェクトが呼び出されているのかをプログラマに分析してもらうことです。

具体的には、IIS ログの「所要時間」列を確認してください。

他のヒント

どのオブジェクトが呼び出されているかを判断するには、以下を探します。

 <OBJECT ID=MyObject RUNAT=SERVER PROGID=MyDll.MyObject></OBJECT>

または

 set myObject = server.createobject("MyDll.MyObject")

ASP ページ内で。

これは (COM+ オブジェクトではなく) 標準 DLL を呼び出している可能性があることに注意してください。インスタンス化の方法はどちらのタイプでも同じです。

実行している COM+ プロセスを知りたい場合は、コンポーネント サービス アプリを確認してください。

代替テキスト http://img38.imageshack.us/img38/5062/capturerm.png

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top