如何检查.Net生产服务器的内存?

如何检查.Net生产服务器的内存?,.net,multithreading,debugging,stack-trace,.net,Multithreading,Debugging,Stack Trace,我有一个基于.Net的网站,其中一个功能在生产服务器上陷入僵局。我还没能在开发中重现这个问题。但我有一个信号,可以很容易地检测到是否发生了死锁,那就是线程的数量开始从“正常”的50增加到100以上 所以我想做的是,当线程数超过100时,以某种方式将信息转储到文件中。这些信息可能是堆栈跟踪、在线程上下文中运行的对象等任何可能导致我找到问题根源的信息 我曾尝试添加简单的日志记录,但在生产环境中记录这一点非常昂贵 从一个正在运行的站点上可以做到这一点吗?该站点正在IIS中运行,并带有.Net 3.5。

我有一个基于.Net的网站,其中一个功能在生产服务器上陷入僵局。我还没能在开发中重现这个问题。但我有一个信号,可以很容易地检测到是否发生了死锁,那就是线程的数量开始从“正常”的50增加到100以上

所以我想做的是,当线程数超过100时,以某种方式将信息转储到文件中。这些信息可能是堆栈跟踪、在线程上下文中运行的对象等任何可能导致我找到问题根源的信息

我曾尝试添加简单的日志记录,但在生产环境中记录这一点非常昂贵


从一个正在运行的站点上可以做到这一点吗?该站点正在IIS中运行,并带有.Net 3.5。

如果在该站点上安装了Visual Studio远程调试器,您可以在远程系统仍在运行时远程检查软件的状态。

您也可以从Microsoft尝试,Microsoft可以根据性能计数器的值(如线程数)有条件地生成进程转储。以下是该文件给出的一个示例:

示例:在outlook运行时编写名为“outlook”的进程转储 句柄计数超过10000:

C:>procdump outlook-p“\Process(outlook)\Handle Count”10000

在您的例子中,您将指定“线程计数”而不是“句柄计数”,并且您的值将是100而不是10000

由于您运行的是IIS,我认为进程名是w3wp或类似的名称(使用它而不是“Outlook”)

此外,由于此进程正在运行托管代码,因此还必须指定“-ma”开关以获取完整转储,这是检查托管进程转储所需的