我有几个 perfmon 性能计数器,我想在较长的一段时间内(比如一周或一个月)跟踪特定 ASP.NET 应用程序。问题是 perfmon 计数器通常以进程为中心,而不是以 ASP.NET 应用程序为中心或以 AppPool 为中心。因此,例如,我可以绑定计数器
.NET CLR Memory performance counters\# Gen 0 Collections
到特定的 IIS 工作进程(令人讨厌的是,它是通过 w3wp、w3wp#1、w3wp#2 来识别的 - 但为了解决这个问题,请参阅如何将“w3wp”进程名称转换为 PID 或用户名?(即“w3wp#29”)),但我似乎无法将其绑定到“现在或将来恰好运行 ASP.NET 应用程序 X 或 AppPool Y 的任何进程”。这意味着,如果 IIS 回收工作进程,或者如果有人重新启动 IIS 或重新启动计算机,那么我的 perfmon 日志就不能指望继续跟踪同一个 Web 应用程序。
是否有一些技巧可以使用 perfmon 来监视给定的 webapp,即使工作进程(例如 w3wp.exe)重新启动、机器重新启动等?
我在搜索其他问题时发现了几个潜在的答案,但感觉它们并不是 100% 正确(尽管我会赞成解释为什么它们实际上可能是正确的):
- 从如何设置 Perfmon/Logman 以仅获取特定 IIS 进程的线程性能计数器?我感觉也许我可以记录全部“# Gen 0 Collections” 统计了机器上所有单独的 .NET 应用程序,然后事后丢弃不相关的应用程序。但首先我不知道如何记录所有应用程序的计数(注意:至关重要的是,您需要“所有应用程序,无论它们何时启动”,而不是“设置 perfmon 任务时启动的所有应用程序”),其次我不知道您如何追溯日志中的哪些数据与您的特定 web 应用程序相对应
- 从如何让 Perfmon 自动跟踪具有多个站点的 IIS 的相同进程?我感觉这个问题也许可以通过一个脚本来解决,该脚本根据 iisapp.vbs 的输出每隔一分钟左右不断进入并调整 perfmon 计数器设置。但这似乎不是一种非常干净的方法。