2011-12-16 11 views
2

私が探している送り返されているどのくらいの要求とデータの端部との間に動作するように、システム内のすべてのページのPage_Loadのを監視するためのいくつかの方法でありますユーザーに。ASP.NETの監視をPage_Load性能が

私は、この100%のサーバー側を行うために探している、と私は、アプリケーションコードに任意のコードを変更する必要はありません。アプリケーションコードの変更が必要な場合は、これを行うための標準的な場所はありますか?私は場所/データベースに情報を記録するweb.configタイプのパラメータを考えています。我々は何らかの形で生データを必要とするだけで処理部分を行うことができます。

私が収集するために見ていることだろう情報は以下のとおりです(クエリ文字列を含む)

  1. ページ名リクエストの
  2. のDateTime
  3. それは
  4. 任意の追加情報を要した時間私たちが手を差し伸べることができるという要請について!

明らかに、前提条件はパフォーマンスに影響を与えてはならないということです。

また、私は何か、低コスト、あるいは我々が我々のシステムを開発することができます方法のいずれかを探しています。

追加情報: はより明確にするために、我々はIISおよび基礎となるオペレーティング・システムの完全な制御を持っている、しかし、ウェブサイトのアプリケーションは、私たちのコントロールの外にあります。設定ファイルは変更できますが、アプリケーションの実際のコードは変更できません。

現在、IIS 6.0を使用していますが、この種のものが効率的で、かつ/またはIIS 7.0/7.5でそのまま使用できる場合は、これを喜んで聞くことができますそれらの提案について。

+0

実行しているIISのバージョンは何ですか? IIS 7にはこのための機能が組み込まれています。 –

+0

6.0現在、私たちはある時点で7.5にアップグレードすることを検討しているので、情報7の機能は便利です(この質問の答えとは考えていませんが、残念です)。 – Martin

+0

@JohnSaunders IIS7のどこに統計情報があるのか​​教えていただけますか?私はそのようなものを見つけることができません(IIS 7.5、Windows Server 2008 R2) –

答えて

3

これはWebフォームの問題ではなく、ASP.netの懸案事項です。 global.asaxまたはIHttpModuleのいずれかを使用して、BeginRequest/EndRequestイベントにフックをかけて、リクエストの所要時間を追跡します。

StopWatchModule.cs

class StopWatchModule: IHttpModule 
{ 
    private Int64 _requestStartTicks; 

    public void Init(HttpApplication application) 
    { 
     application.Context.BeginRequest += Application_BeginRequest; 
     application.Context.EndRequest += Application_EndRequest; 
    } 

    private void Application_BeginRequest(object sender, EventArgs e) 
    { 
     _requestStartTicks = Stopwatch.GetTimestamp(); 
    } 

    private void Application_EndRequest(object sender, EventArgs e) 
    { 
     Int64 requestStopTicks = Stopwatch.GetTimestamp(); 

     Double requestDurationMs = (Double)(requestStopTicks - _requestStartTicks)/Stopwatch.Frequency/1000000f; 
     /* 
      Sample output: 
      Request for "~/EditCustomer.aspx" took 37 ms to complete 
     */ 
     HttpContext context = ((HttpApplication)sender).Context; 
     Logger.Info("Request for \"{0}\" to {1} ms to complete", 
       context.Request.AppRelativeCurrentExecutionFilePath, 
       requestDurationMs.ToString("r", CultureInfo.InvariantCulture)); 
    } 
} 

ウェブ。コンフィグ

<configuration> 
    <system.web> 
     <httpModules> 
      <add name="StopWatchModule" type="StopWatchModule" /> 
     </httpModules> 
    </system.web> 
</configuration> 

上記のエラーがあるかもしれないので、私はメモリから書いていますが、それはアイデアです。あなたのログメッセージは、あなたが望むように詳細にすることができます。 Loggerはある種のロギングライブラリです。私はlog4netが好きですが、選択肢はあなたのものです。私が探している何

+0

パフォーマンスはこれとどこに座りますか?リクエスト自体からはラインの外れですか?これは実際のリクエストに影響しますか?また、文脈の人生は何ですか?それは単一のページですか?セッション情報も取得できるはずだと思いますか? – Martin

+0

私はこれを答えとしてマークしましたが、私が作者からの返事を得ていないのに、私たちが行くことに決めました。 – Martin

+0

これはリクエスト自体とインラインであり、コンテキスト全体にアクセスできます。リクエスト、レスポンス、セッションなど、アプリケーションの構造にどのように適合するかについての詳細は、asp.netのパイプラインを調べてください。これは.netのすべてのhttp開発の中核です。 webforms、mvcなどはすべてasp.netパイプラインの上に構築されています。 –

1

あなたはglobal.asaxに触れることができますか?あなたはそれにいくつかのパフォーマンスメトリックを追加することができますので、あなたはあなたを必要とするすべてはまた、IISログを解析してみてください内容に応じて

など、失敗、完了、要求を受信したときのためにそこにアプリケーションイベントを上書きすることができます。

+0

アプリケーションコードを再コンパイルする必要がないことを条件として、提供できるリンクはありますか? – Martin

0

あなたはいつもpageOutput =「false」のオプションを使用して、あなたのweb.configファイルにトレースを有効にすることができます。

特定の要求に関する情報を表示するには、trace.axdに移動します。

また、あなたの@pageディレクティブでそれを設定することによって、特定のページのためにこれを行うことができます。

0

はどのくらい要求して帰ってきたユーザーに送信されるデータの 端部との間を動作するように、システム内のすべての ページのPage_Loadのを監視するためのいくつかの方法です。それはバイト、時間とIPをご提供いたしますので、IISログ時間取らフィールドはあらゆる使用のものとすることができる場合、私は、追加情報を参照してくださいfields

など、(送信される/受信)不思議

関連する問題