2008-12-10 76 views
7

在我的機器(XP,64)上,ASP.net工作進程(w3wp.exe)始終啓動,保留5.5GB的虛擬內存。無論其託管的Web應用程序如何(它可以是任何東西,甚至是aspx中的空白網頁)。確定在w3wp.exe中保留了誰/保留了5.5 GB的虛擬內存

這個虛擬內存的大塊在進程啓動時被保留下來,所以這不是某種緩存「泄漏」。

有些使用windbg進行窺探表明內存問題是Private,Reserved和RegionUsageIsVAD,這表明它可能是某人調用VirtualAlloc的工作。它還表明,所討論的內存分配/保留在每個1GB的4個大塊和幾個較小的塊(每個1/4GB)中。

所以我想我需要找出誰在調用VirtualAlloc並保留所有這些內存。我怎麼做?

因爲w3wp.exe是由svchost.exe啓動的進程(即IIS/ASP.Net過濾器),並且如果我嘗試自行啓動它,因此在內存分配之前將調試程序附加到進程上是非常棘手的爲了調試它,它只是關閉而沒有所有這些大量的內存預留。另外,如果我重新使用命令行參數(這很有意義,因爲它是由調用進程創建的管道),所以命令行參數無效。

我可以在事實之後(這是我如何找到有問題的內存區域)將windbg附加到進程中,但我不確定在那一點可能確定誰分配了哪些內容。

+1

我只想說「哦,我的上帝」! – StingyJack 2008-12-10 13:09:38

+0

這是我見過的新標記的第一個相關用法(當然,除了NBC.com上的英雄頁面之外)! – 2008-12-10 13:21:34

+0

我在服務器2008,IIS7 – 2009-12-21 19:35:31

回答

7

王大衛answers this to a similar question

[...]在ASP.Net性能開發板的每個告訴我:

  • 保留虛擬內存是沒有什麼可擔心的。您可以查看 它作爲CLR的性能/緩存先決條件 。而重負荷測試 顯示它沒什麼好擔心 一下。
  • System.Windows.Forms - 它不是由空的你好世界ASPX 頁拉。您可以使用Microsoft Debugging 工具和「sx e ld system.windows.forms」來確定 實際上在運行時將其拉入。 或者您可以通過ildasm查找 依賴項。
  • mscorlib - 確保它是GAC'd和NGen'd正確。
0

保留內存爲分配內存很大的不同。保留內存只是分配地址空間。它不提交任何物理頁面。

此地址空間很可能由IIS分配給它的堆。它只會在需要時提交頁面。

如果你真的想從windbg啓動w3wp.exe,你可能需要用有效的命令行參數啓動它。您可以使用Process Explorer來確定當前w3wp.exe進程的命令行是什麼。例如,我的服務器上,我的是:

C:\ WINDOWS \ SYSTEM32 \ INETSRV \ w3wp.exe的-a \ \管\ iisipmeca56ca2-3a28-452a-9ad3-9e3da7b7c765 -t 20 -ap「 DefaultAppPool「

我不確定那裏的UID指定了什麼,但它看起來可能是由W3SVC服務(這是啓動w3wp.exe)命名的管道命名的。所以你應該在從windbg啓動w3wp之前看看你的命令行。