8

運用サーバーの W3WP プロセスは常に高くなっています。100% で最大になることはありませんが、90%sa の公正なビットにジャンプします。これを調べるために、JetBrains dotTrace を使用してライブ アプリケーションのプロファイルを作成しました。

結果は予想通りでした。遅いメソッドはすべて、データベースにクエリを実行する NHibernate 関数でした。私の質問は、データベースサーバーが別のマシン上にあるため、これらの遅い方法が実際に Web サーバーの CPU に影響を与えるかどうかです。確かに、データベース サーバーが何らかの作業を行っている場合、Web サーバー jsut は応答を待機し、CPU は上昇しないはずですか?

この場合、dotTrace (または必要に応じて別のツール) を使用して、サーバーが他の場所からの応答を待っているのではなく、CPU が使用されている場所を特定するにはどうすればよいですか?

ホットスポットの dotTrace スクリーンショット 代替テキスト

スクリーンショットからわかるように、ほとんどの時間は、外部 HTTP 要求が完了するまでの待機に費やされています。ただし、これらは私が考えていたWebサーバーのCPU使用率に影響を与えるべきではありません

4

1 に答える 1

2

Web サーバーでハードワークを行っているのは NHibernate 自体かもしれませんが、データベースは実際にはほとんど何もしていません。

SQL プロファイラーを実行して、(NHibernate からの) 1 回の呼び出しでデータベースが本当に長時間かかっているかどうかを確認することをお勧めします。

私の推測では、NHibernate がデータベースに対して非常に多くの呼び出しを行い、それらを (erb サーバー サーバー上で) 処理していることがわかり、これが高 CPU の原因であると考えられます。

ジョインで遅延フェッチが多い場合、NHibernate がデータベースに対して非常に多くの呼び出しを行い、1 つの要求に対してデータを取得する状況に陥る可能性があります。

于 2010-09-23T09:38:52.580 に答える