如何在asp.net应用程序中找到i / o瓶颈

时间:2013-02-25 01:08:03

标签: asp.net iis windbg performance

我们有一个高流量的网站,它会产生大量的I / O.在10分钟内,它已经读取了超过10 GB的数据(在任务管理器中看到w3wp)。对于内存和应用程序挂起,我一直在使用WinDbg。但我不知道如何在一个负责最高I / O的进程中找到对象/方法。

这甚至可能吗?

修改 问题是:有没有办法在.NET程序集中分析I / O操作,比如:按最高磁盘I / O排序的线程列表(或类似的东西可以帮助我查看)

3 个答案:

答案 0 :(得分:6)

<强> ANTS Performance Profiler

我已经使用这个工具取得了巨大成功 - 处理查找特定指令,这些指令导致大容量Web场中的~512GB内存在5-10分钟内被咀嚼。听起来和你的情况非常相似。

现在,要切合实际 - 它不会神奇地解决你的问题。它仍然需要大量的设置,彻底的分析和侦探工作。但是这个工具肯定把问题从“几乎无法解决”转移到“几天内可以解决”。

<强>更新

正如我在评论中提到的那样(和Ben Emmett回应),我们可以使用ANTS监视内存,文件系统句柄 - 几乎任何资源消耗并深入调用堆栈以查看特定例程的影响。

答案 1 :(得分:1)

我想出了这个工具AppDynamics Lite,它以可视方式显示您的应用程序调用成本和性能。它可能会帮助您找出哪些函数正在进行最繁琐的IO操作。

引用;

  

了解CLR的健康状况,包括响应时间,吞吐量,异常率和垃圾回收时间等关键指标,以及CPU,内存和磁盘I / O等关键系统资源。

值得一试,因为它是试用/免费30天。希望能帮助到你。 Ps:我不以任何方式与AppDynamics联系。

答案 2 :(得分:1)

您可以使用Windows 8中的(免费)Windows Performance Toolki t,它也可以在Windows Vista及更高版本上运行。在那里,您可以打开系统范围的分析,以一次查看所有进程中发生的情况。无需仪器。只需一次重新启动即可设置由WPRUI.exe自动完成的神秘注册表项。

使用XPerf,您可以启用IO Init堆栈,以便为每个启动的IO获取一个调用堆栈。唯一的问题是64位进程的堆栈将被破坏,这意味着您将只看到代码的BCL方法之上的第一个方法,因为操作系统的堆栈跟踪功能存在Windows 7错误。

解决方法是Ngen您的程序集或移动到Server 2012或切换到x86进行性能分析以查看更深层次的调用堆栈。

即使没有任何调用堆栈,也会看到所有文件IO和CPU活动以及文件名和硬盘的使用时间。这应该可以为您提供有关您的应用程序的哪个部分导致光盘IO的良好信息。从部分调用堆栈中,即使没有完整堆栈,您也应该能够查明问题。

该工具将为您提供比任何商用分析器更多的洞察力,但需要您学习如何使用它。由于调用堆栈不是以您的代码或用户模式结束,而是在内核中,您还可以确定是否病毒扫描程序导致严重的IO延迟。但是你需要知道你的处理器是如何工作的。这个工具集最初针对的是内核开发人员,它解释了为什么你会看到这么多无用的列。

在下图中,您可以看到堆叠的文件IO和CPU消耗。当您在光盘IO图中选择高IO文件时,它将在CPU消耗中突出显示在IO处于活动状态时同时获取的所有相关调用堆栈。这样,您可以直接从IO导航到可能被阻止的线程。

enter image description here