2017-01-13 42 views
1

2天前,我們發佈了現有的asp.net 2.0應用程序的新版本,現在已經轉換爲4.5版本。現在我們看到這個asp.net應用程序的突然應用程序池在生產服務器上佔用大量內存,我猜測超過30 GB。明智的代碼沒有什麼,這個應用程序以前做的事情,或者現在增加了這個新的版本,它會消耗任何重量,也沒有任何文件上傳/下載,重型緩存什麼也沒有。生產服務器上給定IIS應用程序池的內存使用量過大

由於我無法找到任何代碼,可以導致這一點,所以我需要一些分析器,它可以告訴服務器上的一些細節。

那麼有沒有什麼免費或開源的工具可以幫助我們找到所有會話數據的詳細信息,這些數據的大小是存儲在服務器上的這個應用程序池的大小,以及其他任何可以幫助您瞭解爲什麼這個特定應用程序游泳池正在佔用這麼多的記憶。 除了工具,如果有其他方向/建議,這也會有所幫助。謝謝...

enter image description here

+0

http://stackoverflow.com/questions/9666356/high-memory -usage-with-w3wp-application-pool-iis-7 – spender

回答

3

那些那種經常可以通過從微軟WinDbg調試工具,它是免費的追溯問題。

首先,您應該創建當前w3wp進程的轉儲文件。

https://msdn.microsoft.com/en-us/library/d5zhxt22.aspx

之後,你就可以到該進程的當前狀態加載到WinDbg的。 https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

https://blogs.msdn.microsoft.com/jankrivanek/2012/11/15/setting-up-managed-code-debugging-with-sos-and-sosex/

https://theartofdev.com/windbg-cheat-sheet/

http://windbg.info/

記住WinDbg的是低層次的工具,所以你需要花一些時間來學習和習慣它。使用的

實施例:

  1. 創建通過任務管理器進程轉儲(* .DMP)。位於C:\ Users \ {用戶名} \ AppData \ Local \ Temp文件夾中。
  2. 打開WinDbg中(64位) - >打開崩潰轉儲 - >選擇創建的* .DMP
  3. 之後,你需要設置符號:

    .symfix

    .reload

  4. 接下來,您應該加載.net運行時:

    .loadby sos clr

  5. 如果要加載其他模塊的擴展命令(http://www.stevestechspot.com/

    .load PathToFile \ sosex.dll

    !sosex.help

  6. 現在你已經掌握了一切,你可以開始分析內存堆,線程,鎖等....

您還可以通過苔絲Ferrandez找到在博客上非常有用的信息,提示和技巧https://blogs.msdn.microsoft.com/tess/tag/debugging/

+0

感謝darjan爲你的初始方向。我只是想澄清一下。我們不能在服務器上安裝調試工具,這是因爲我們無法控制的原因,所以我只能請求服務器團隊向我提供內存從任務管理器轉儲(而不是崩潰轉儲,因爲它從不崩潰軟件ar)爲應用程序需要更多內存的池,然後在我的本地開發系統中使用windbg分析此轉儲中佔用大部分內存的內容。對於這個我知道我需要打開windbg的轉儲文件,可以請指導什麼進一步我需要做的打開轉儲的意義上的任何鏈接,我是否也需要pdbs? – LearningNeverEnds

+0

目前正在製作和存在內存問題的副本,沒有使用它的pdbs,因爲我們在沒有它們的情況下構建/部署,所以雖然我知道如何讀取轉儲然後加載符號,指向pdbs和exe/dll你的應用程序使用,仍然沒有很好的方向如何做類似的事情時,你的服務器副本從未部署pdbs,因此要求一些輸入只爲了這個具體,我會更新這個部分的問題一旦我有點清晰我應該什麼尋找。謝謝。 – LearningNeverEnds

+0

@LearningNeverEnds您不需要.pdb文件來通過WinDbg使用和分析進程轉儲。檢查更新的答案。 –

相關問題