.NET生产代码分析工具

时间:2011-04-11 04:32:18

标签: .net performance profiling

是否有任何.NET性能分析工具可以附加到正在运行的Windows服务并进行基本的堆栈调用取样?如果该工具不需要安装,那将是很好的,因为我需要通过客户的IT部门获取大量繁文缛节。

谢谢


性能问题的性质: 这个具有性能问题的程序作为Windows服务运行,它处理来自200多个移动设备的收入消息。通常,此程序每秒至少可处理10条消息。不幸的是,在最近升级之后,由于某些原因,该程序通常在上午7点左右不再能够足够快地处理消息。一条消息进入,它可以在程序内部队列中停留超过10分钟,然后才能进行处理。我们还注意到程序使用的CPU高于普通CPU。通常它在八核机器上应该是5%,现在是20-25%。

该程序不仅处理传入的消息,还维护数据库并向客户端提供数据。它有五个线程处理传入的消息,任何维护作业都在其线程上运行。

当前的解决方法是在发生减速时重新启动服务。重启后,程序将再次正常运行(CPU低于5%)。直到第二天早上7点左右,它才会发生。每次重新启动后,队列中的所有消息都将被丢弃。通常上午7点和下午5点是我们收到大量消息的时间,但问题似乎只发生在上午7点。

我们的团队尝试使用模拟消息在内部重现该程序,并进行代码比较以查看是否存在任何严重瓶颈。

4 个答案:

答案 0 :(得分:2)

我不知道您可以在不安装的情况下使用任何分析器,因此您最终可能必须与客户的IT部门达成一些协议。

但是,您可以通过查看.NET性能计数器获得一些见解。也许该服务由于某种原因正在进行过多的垃圾收集。

如果这不会产生任何线索,您可以使用SysInternals中的Process Explorer。无需事先安装即可运行。属性窗口有一个Threads,它将显示进程中的所有线程以及它们的运行时间,这可能会有所帮助。

答案 1 :(得分:1)

查看AVICode(最近被Microsoft收购)是否符合您的需求。该产品旨在监控生产环境中应用程序的性能。我在10年内没有看过那个产品,但是当我之前看过它时,它强调能够以最小的开销从生产中运行的应用程序获取异常信息和调用堆栈。它是基于.NET分析API构建的,所以如果它为您的CPU利用率方案提供功能,我也不会感到惊讶。我不知道在服务器上安装/启用它的详细信息,所以我不确定它是否能轻松清除您的IT部门障碍。

同时查看performance counters for the .NET Framework,可以在不触及您的应用程序或其配置的情况下启用{<3}}。

答案 2 :(得分:1)

时间已经过去,还有另一种列出的工具:CodeTrack。无需安装即可使用。

答案 3 :(得分:0)

感谢所有建议。

我尝试了许多分析工具,但所有这些工具都需要安装,有些需要花钱。

尝试使用“Windows Debug Tools”+“Process Explorer”+“Process Monitor”查看是否可以获取正在运行的线程堆栈跟踪的快照。遗憾的是无法让我们自己的托管符号文件(pdb)工作。我可以看到对内核api的所有调用,但没有我自己的代码。

幸运的是,我们的客户已经批准我们安装了一个分析器。如果您使用的是Visual Studio Premium或Enterprise版本,则会附带stand alone profiler。我能够在客户端计算机上获取配置文件报告并使用Visual Studio分析报告。

相关问题