使用 perfmon 在工作进程重启、IIS 重启等期间监视特定的 ASP.NET webapp?

Chr*_*ris 7 performance asp.net perfmon performance-monitoring

我有几个 perfmon 性能计数器,我想在很长一段时间内(比如一周或一个月)跟踪特定的 ASP.NET 应用程序。问题是性能计数器通常以进程为中心,而不是以 ASP.NET 应用程序为中心,或以 AppPool 为中心。因此,例如,我可以绑定计数器

.NET CLR Memory performance counters\# Gen 0 Collections
Run Code Online (Sandbox Code Playgroud)

到特定的 IIS 工作进程(令人讨厌的是,它是通过 w3wp、w3wp#1、w3wp#2 识别的——但要解决这个问题,请参阅如何将“w3wp”进程名称转换为 PID 或用户名?(即——“ w3wp#29) ),但我似乎无法将它绑定到“无论现在还是将来,碰巧正在运行 ASP.NET Application X 或 AppPool Y 的任何进程”。这意味着,如果 IIS 回收工作进程,或者如果有人重新启动 IIS,或重新启动机器,那么我的性能日志不能指望继续跟踪同一个 Web 应用程序。

即使工作进程(例如 w3wp.exe)重新启动、机器重新启动等,是否有一些技巧可以使用 perfmon 来监视给定的 webapp?

我在这里搜索其他问题时发现了几个可能的答案,但他们感觉不是 100% 正确(尽管我会赞成为什么他们实际上可能是正确的解释):

  • 如何设置 Perfmon/Logman 以获取仅特定 IIS 进程的线程性能计数器?我的印象是,也许我可以记录机器上所有单独 .NET 应用程序的所有“# Gen 0 Collections”计数,然后在事后丢弃不相关的那些。但首先我不知道如何记录所有应用程序的计数(注意:至关重要的是,您需要“所有应用程序,无论它们何时启动”,而不是“在您设置 perfmon 任务时启动的所有应用程序” "),其次我不知道您如何追溯地告诉日志中的哪些数据对应于您的特定 web 应用程序
  • 如何使 Perfmon 自动跟踪具有多个站点的 IIS 的相同进程?我的印象是,这可能可以通过一个脚本解决,该脚本基于 iisapp.vbs 的输出,每分钟左右不断进入并调整 perfmon 计数器设置。但这似乎不是一种非常干净的方法。