2013-04-11 37 views
1

需要在運行於Asp.Net 4.0的網站上調查性能問題的建議。ASP.Net web-app內存泄漏調查

網站一個小背景:

該網站是在一個電子商務的框架,已經證明了自己穩定可靠的許多項目建立了一個網上商店。網上商店一直運行穩定一段時間(一年),但是客戶將其ERP(MS Dynamics NAV)升級到較新版本的性能問題後不久就開始興起。

問題本身:

應用程序池正常啓動,但隨後幾乎消耗所有可用內存。所以,顯然這是一個內存泄漏的情況。

更具體的例子: 昨晚應用程序池重新啓動,使用的內存大約500兆字節。大約16-18個小時,游泳池已經在2千兆字節左右運行。該池將繼續增長,直到幾乎所有的內存都被消耗,應用程序變得非常慢。

應用程序池的內存快照採用PerfView在池重新啓動後以及2 Gigs。快照的
DIFF在下面附: Heap snapshots diff between 500Mb and 2Gb

正如你所看到的,上面一行是mscrolib LocalDataStoreHolder!如果我嘗試打開它的詳細信息,我可以看到下面的Referred-From視圖,如下所示: Referred-from view on the LocalDataStoreHolder 問題是 - 我無法打開任何這些節點以獲取更深入的細節。所以目前我無法弄清楚,什麼在吃掉記憶。
如果可能有任何幫助,以下是RefTree屏幕截圖。在這裏你可以看到強壯的手柄佔92.2%。 RefTree view

所以問題是 - 任何人都可以提供任何關於如何深入細節的提示或想法?如何找出導致mem泄漏的原因?

預先感謝您

編輯: 我也試過展鵬螞蟻內存配置文件,這是在不同的線程多勸這裏。 下面是我拍攝一些內存快照後的總結圖,最新的一個在20小時後完成,應用程序池耗盡了3.7 Gb左右的內存。 正如您所看到的,左側巨大的紅色塊是「非託管」,大小爲2.5 Gb。正如ANTS所說,CLR本身或圖形數據或通過P/Invoke或COM +訪問的非託管數據可能會用掉它。不過,不知道如何獲得更深的細節。 enter image description here

回答

1

PerfView無法恢復64位應用程序的堆棧(可以在原始文檔中找到它)。可能你的應用程序是64位應用程序。如果可能的話 - - 嘗試重新編譯並將其作爲32位執行。

+1

看我上面的編輯,用螞蟻探查器查看 – Trogvar 2013-04-12 10:56:14