2013-02-25 64 views
6

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

这甚至可能吗?

编辑 的问题是:有没有一种方法来分析我的.NET程序集/ O操作,说:由最高的磁盘I/O(或类似的东西分类线程的列表,这将有助于我在哪里看看)

+0

你有地方可以在代码中发生的任何想法,或者是你运行完全瞎了吗? – 2013-02-25 01:11:28

+0

我不知道,走了几遍所有的代码(这是一个很大的网站,很多功能)。可以上传和发布图片,但每月的数据大约为10GB。 – 2013-02-25 02:01:47

+0

你是否正在处理应用程序中的这些图像? – 2013-02-25 02:07:16

回答

6

ANTS Performance Profiler

我已经使用这个工具,取得了巨大成功 - 处理发现这是造成〜对高容量的网络农场512GB内存在5-10分钟内得到吃掉的具体说明。听起来和你的情况非常相似。

现在,要现实 - 它不会奇迹般地解决您的问题。它仍然需要很多设置,彻底的分析和侦探工作。但是这个工具绝对是把问题从“几乎无法解决”转为“几天内解决”。

更新:

正如我在评论中提到的(和本埃米特呼应),我们可以用蚂蚁来监视内存,文件系统处理 - 几乎所有的资源消耗和深入调用堆栈看特定例程的影响。

+0

你能否详细说一下如何用蚂蚁做到这一点?你在使用内存分析器吗?与windbg相比,我觉得它有点限制。 – 2013-02-25 02:03:23

+0

@爱尔格从最外层的可疑程序开始,我们可以看到在该程序期间积累了多少内存,FS句柄等 - 并开始钻入更深的程序,同时看到资源积累保持相对平稳 - 这意味着我们正在调零在问题上。 – 2013-02-25 02:07:16

+0

但内存消耗实际上并不令人担心(在繁忙时间最高为400 mb,对于64位应用程序通常为275 mb)。在你的情况下,512GB的内存是什么意思? – 2013-02-25 04:06:20

1

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

引用;

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

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

1

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

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

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

即使没有任何调用堆栈以及使用硬盘多长时间的文件名,您将看到所有文件IO和CPU活动。这应该给你很好的信息,你的应用程序的哪一部分导致光盘IO。从部分调用堆栈中,即使没有完整的堆栈,您也应该能够指出您的问题。

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

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

enter image description here

+0

哇,非常感谢洞察力。我不知道这存在。我会试试看。 – 2013-03-17 05:51:31