2013-02-25 67 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