4

ASP.NET の場合:

  1. ASP.NET ワーカー プロセスが最後に再起動されたのはいつですか?

  2. ASP.NET では、アプリ ドメインが最後にいつリサイクルされたかをどのように確認できますか?

4

1 に答える 1

3

ワーカー プロセスの場合、対応する perf から[プロセス] -> [経過時間]をプログラムで読み取ることができます。counter (1) またはSystem.Diagnostics.Process名前空間から直接。AppDomainの場合、起動時にアプリケーションレベルの変数を設定して、ベースラインとして機能し、それに対して手動で測定できます。

Scott Mitchell は実際に、これに関して 2 つの優れた投稿を行っており、信じられないかもしれませんが、8 年経った今でも関連性があります (2)。Cassini (Vista、VS 2008) で実行すると、次のように正確なシステム アップタイムが表示されます。

TimeSpan.FromMilliseconds(Environment.TickCount)

...そして正確な Process/AppDomain 稼働時間:

foreach (Process p in Process.GetProcessesByName("WebDev.WebServer"))
{
    Response.Write(DateTime.Now.Subtract(p.StartTime).ToString() + "<br/>");
}

Response.Write(DateTime.Now.Subtract((DateTime)Application["StartTime"]).ToString());

正しいPerfomanceCounterを取得することもできますが、正しい値を読み取ることができないようです (セットアップでは常にゼロです)。

Response.Write(new PerformanceCounter("Process", "Elapsed Time", "WebDev.WebServer").NextValue() + "<br/>");

Scott の記事は一読の価値があります。ProcessInfoProcessModelInfo (例: ProcessModelInfo.GetHistory ) には豊富な情報がありますが、残念ながら Cassini では利用できません。

プロセス メトリックは、ASP.NET プロセス モデルが有効になっている場合にのみ使用できます。ワーカー プロセス分離モードで IIS 6 以降のバージョンを実行している場合、この機能はサポートされません。

更新: NextValue() でゼロを回避するためにカウンターを正しく読み取る方法の優れた説明:リンク

HTH

(1) https://serverfault.com/questions/90927/lifetime-of-iis-worker-process-or-appdomai

(2) http://www.4guysfromrolla.com/articles/041002-1.aspx

于 2010-10-30T15:20:34.703 に答える