【问题标题】:Programmatically find when the ASP.NET worker process and app domain last started?以编程方式查找 ASP.NET 工作进程和应用程序域上次启动的时间?
【发布时间】:2010-10-30 00:04:26
【问题描述】:

在 ASP.NET 中:

  1. 如何知道 ASP.NET 工作进程上次重新启动的时间?

  2. 在 ASP.NET 中,如何判断应用程序域上次回收的时间?

【问题讨论】:

    标签: c# asp.net iis appdomain worker-process


    【解决方案1】:

    对于工作进程,您可以通过编程方式从相应的 perf 中读取 Process -> Elapsed Time。计数器 (1) 或直接来自 System.Diagnostics.Process 命名空间;对于 AppDomain,您可以在启动时设置一个应用程序级变量作为您的基准并手动对其进行衡量。

    Scott Mitchell 实际上有几个关于此的好帖子,这些帖子在 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() 上的零:Link

    HTH

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多